2016-11-24 34 views
0

林很新的反应,我的工作一个注册页面复选框元素
我如何能实现一个反应回调

而下方则是选择组件实现,

const ChoiceItem = ({ options, itemId, selectedIndex, onChange }) => (
    handleChange: function(checked){ 
    const value = []; 
    options.map(option, i) => (
     value[ i ] = checked; 
    ) 

    }, 
    <Card> 
    { 
     options 
     .map((option, i) => (
     <Checkbox 
      id={ `Choiceitem-checkbox-${ i }-${ itemId }` } 
      key={ i } 
      label={ option.text } 
      style={ styles.checkbox } 
      value={ '' + i } 
      onChange={ (checked) => onChange(itemId, [ i ], checked) } 
     /> 
    )) 
    } 
    </Card> 
); 

我想什么在这里做的是循环遍历选项,并将值赋给一个名为value的数组,并在注册表单中调用handleAnswerChange并在那里设置值。任何人都可以告诉我如何归档?
谢谢。

+0

在你的代码片段中,你没有将'this'绑定到'this.handleAnswerChange'。 即你应该'this.handleAnswerChange = this.handleAnswerChange.bind(this)'在你的'构造函数'中。否则,'this.setState()'不适用于你的情况。 顺便说一下,在'renderItem()'中,你没有传入'props'。 –

+0

@andre因为'handleAnswerChange'是使用箭头函数定义的,所以它会自动绑定。这确实需要至少在babel中使用第2阶段。 – kwelch

+0

@kwelch哎呀,对不起,我没有注意到他/他使用了箭头功能,我的不好。 –

回答

0

听起来像是你最好的解决方案是双向绑定。您可以查看添加双向绑定的反应文档。

react two way binding

另一种选择将使用jquery

0

你实际上非常接近这个。我会更新handleChangeMultipleChoiceItem

handleChange = (index) => (checked) => { 
    const newValues = options.map((option, i) => { 
    // if it is the changed returned the new state 
    // otherwise just return the current value 
    return index === i ? checked : option; 
    }); 
    this.props.onChange(this.props.itemId, newValues); 
}; 

然后里面渲染我将设置onChange:您MyRegisterForm每个复选框点击

onChange={this.handleChange(i)} 

那么这应该更新状态。

+0

感谢您的回复。在我的情况下,有2个复选框,有没有办法在handleChange函数中发送数组。在上面的例子中,只有当复选框被正确选中时才会设置值。但我想在每次更改时在数组中设置2个复选框值。 – Anna

+0

我实际上需要选中的复选框的索引发送到注册表单以保存为答案。我有点困在那里:( – Anna

+0

传入的'i'将允许你将它连接到数组中的每个复选框,这将被调用来检查和取消选中。选中的变量将保持检查状态,I根据你的代码片断它。 – kwelch