当从数组呈现ReactJS组件时,组件的onChange函数将传递最后一个参数值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当从数组呈现ReactJS组件时,组件的onChange函数将传递最后一个参数值相关的知识,希望对你有一定的参考价值。

我有一个对象数组,基于此我生成一个ReactJS组件数组。

然后,这些将在render方法中呈现。简称如下,

getComponents():

f = [{name: 'Input1', colSpan: 5}, {name: 'Input2', colSpan: 10}];
var renderedComponents = [];

for(i=0;i < f.length;i++){

 var name = f.name;
 var colSpan = f.colSpan;

 renderedComponents.push(
      <Col span={colSpan} key={i} style={{marginRight: 5}}>
        <FormItem {...fieldbounds} {...fieldparams}>
          <Input
          onChange={(e)=> {this.inputChange(name, e)}}
          />
        </FormItem>
      </Col>
    );
  }

return renderedComponents;

onChange Handler:

inputChange = (n,e) => {
  console.log(n);
}

渲染():

render(){
    return(<div>{this.getComponents()}</div>);
}

当组件渲染时,我得到两个文本框。但是当更改文本框中的值时,即使我更改Input1,我也会获得“Input2”的控制台日志。

看起来name属性在呈现时被赋予f数组的最后一个值。

目前的行为:

  • 在Input1中更改文本的控制台日志为“Input2”
  • 在Input2中更改文本的控制台日志为“Input2”

预期行为:

  • 在Input1中更改文本的控制台日志为“Input1”
  • 在Input2中更改文本的控制台日志为“Input2”
答案

使用以下代码替换onChange中的胖箭头函数时,我得到了预期的行为。

onChange={this.inputChange.bind(this, name)}

有人可以帮助我理解为什么.bind工作而胖箭头功能不起作用?

以上是关于当从数组呈现ReactJS组件时,组件的onChange函数将传递最后一个参数值的主要内容,如果未能解决你的问题,请参考以下文章

reactjs - 状态更改后组件不呈现[重复]

重新渲染 Reactjs 数组组件

ReactJs:如何创建一个包装器组件,该组件在单击时会执行某些代码并呈现子组件?

在reactjs中使用基于类的组件时无法呈现数据列表

测试按钮单击 ReactJS 上是不是呈现另一个组件

组件类未呈现