ReactJS:如何使用 setState 切换活动项目
ReactJS: how to use setState to swtich active item
自己发现错误,看下面我的回答
但是,如果 smb 向我解释这种处理事件的魔法是如何工作的,我将不胜感激。 changeActive 函数如何知道索引变量是什么?
我有语句列表,默认情况下第一个是活动的。我想在点击时切换为活动状态。
下面的代码将 Statements 的组件状态 activeIndex 更改为单击语句的索引。但是 Statement 组件道具 active 并没有像我假设的那样做出反应,它只是从每个 Statement 中消失,所以我的列表中没有活动项目。
那么我做错了什么?什么是最佳做法?
statements.coffee
@Statements = React.createClass
getInitialState: ->
statements: @props.data.statements
activeIndex: 0
changeActive: (index) ->
@setState activeIndex: index
console.log(index)
render: ->
React.DOM.div
className: 'row'
React.DOM.div
className: 'col-sm-9 statements'
for statement, index in @state.statements
React.createElement Statement, statement: statement, index: index, key: statement.id, active: (if @state.activeIndex == index then true), handleActiveStatement: @changeActive
statement.coffee
@Statement = React.createClass
handleClick: ->
@props.handleActiveStatement(index: @props.index)
render: ->
React.DOM.div
className: 'statement ' + (if @props.active then 'active ' else null)
onClick: @handleClick
@props.index+1+'. '
React.DOM.span null,
@props.statement.body
好的,我发现错误了。可能对smb有用。
错误在这一行:
@props.handleActiveStatement(index: @props.index)
应该是:
@props.handleActiveStatement(@props.index)
如果 smb 向我解释这种处理事件的魔法是如何工作的,我将不胜感激。 changeActive 函数如何知道索引变量是什么?
自己发现错误,看下面我的回答
但是,如果 smb 向我解释这种处理事件的魔法是如何工作的,我将不胜感激。 changeActive 函数如何知道索引变量是什么?
我有语句列表,默认情况下第一个是活动的。我想在点击时切换为活动状态。
下面的代码将 Statements 的组件状态 activeIndex 更改为单击语句的索引。但是 Statement 组件道具 active 并没有像我假设的那样做出反应,它只是从每个 Statement 中消失,所以我的列表中没有活动项目。
那么我做错了什么?什么是最佳做法?
statements.coffee
@Statements = React.createClass
getInitialState: ->
statements: @props.data.statements
activeIndex: 0
changeActive: (index) ->
@setState activeIndex: index
console.log(index)
render: ->
React.DOM.div
className: 'row'
React.DOM.div
className: 'col-sm-9 statements'
for statement, index in @state.statements
React.createElement Statement, statement: statement, index: index, key: statement.id, active: (if @state.activeIndex == index then true), handleActiveStatement: @changeActive
statement.coffee
@Statement = React.createClass
handleClick: ->
@props.handleActiveStatement(index: @props.index)
render: ->
React.DOM.div
className: 'statement ' + (if @props.active then 'active ' else null)
onClick: @handleClick
@props.index+1+'. '
React.DOM.span null,
@props.statement.body
好的,我发现错误了。可能对smb有用。
错误在这一行:
@props.handleActiveStatement(index: @props.index)
应该是:
@props.handleActiveStatement(@props.index)
如果 smb 向我解释这种处理事件的魔法是如何工作的,我将不胜感激。 changeActive 函数如何知道索引变量是什么?