javascript - React : this.状态在for循环中消失

标签 javascript reactjs

如何将 this 带入我的 .map() 循环?它似乎消失了。 :-(

我正在创建一个“动态表单”,用户可以在其中为其表单指定多行输入。我想遍历 state.items[] 中的所有项目并为它们构建表单输入字段。

例如,表单以“field”和“autocomplete_from”开头。然后用户可以单击添加新行以在其表单中获取更多行。

102     render: function() {
103       return (
104         <div>
105           {this.state.items.map(function(object, i){
106             return (
107               <div>
109                 <FieldName/>

110                 <strong> State.autocomplete_from:
                            {this.state.autocomplete_from} </strong>
                         //       ^^^ 
                         //   Uncaught TypeError: Cannot read property 'state' of undefined

120                 <button onClick={this.newFieldEntry}>Create a new field</button>
121                 <button onClick={this.saveAndContinue}>Save and Continue</button>
122               </div>
123               );
124           })}
125         </div>
126       );

最佳答案

.map this 中没有引用你的组件,有几种方法可以解决这个问题

  1. 保存this到变量

    render: function() {
      var _this = this;
    
      return (
       <div>
         {this.state.items.map(function(object, i){
           return (
             <div>
               <FieldName/>
    
               <strong> State.autocomplete_from:
                 {_this.state.autocomplete_from} </strong>
    
               <button onClick={this.newFieldEntry}>Create a new field</button>
               <button onClick={this.saveAndContinue}>Save and Continue</button>
             </div>
           );
         })}
       </div>
     );
    }
    
  2. .map回调设置this(如果你不能使用ES2015特性,这个变体是首选)

    this.state.items.map(function (object, i) {
       // ....
    }, this);
    
  3. 使用箭头函数

    this.state.items.map((object, i) => {
       // ....
    }) 
    
  4. 使用.bind

    this.state.items.map(function(object, i) {
       // ....
    }.bind(this)) 
    

关于javascript - React : this.状态在for循环中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517715/

相关文章:

javascript - 不要触发嵌套子元素的 onClick

reactjs - npm 错误! 404 未找到 - GET https ://registry. npmjs.org/@typescript-eslint%2feslint-plugin - 未找到

javascript - React Horizo​​ntal Timeline distance of undefined 错误

javascript - 如何在不使用内联样式表的情况下将此元素的颜色传递给 javascript?

javascript - 如何在范围索引 Angular js中传递动态值

Javascript 简单计算给出 NAN 或 0

javascript - 如何为默认 knockout 绑定(bind)创建包装函数

javascript - 在 React 中定义内联样式,SyntaxError : Unexpected token

javascript - React 不渲染递归 react 组件

javascript - 我在将主干集合传递到 react 组件时遇到问题