【问题标题】:setState is not a functionsetState 不是函数
【发布时间】:2017-01-23 16:51:28
【问题描述】:

我正在尝试在表格中添加一个删除按钮,以便获取el.id 并将其删除。我看不懂el.id,所以我想把它添加到状态中。

请告诉我是否有其他解决方案或是否可以修复。

这是我的代码:

componentDidMount: function(){
       var url = 'I have an api here'

       axios.get(url).then(function(response){
         var arr = $.map(response.data, function(el) {
           $.each(el, function (i, word) {
             this.setState({el: el});
               $("#data").append(
                 '<tr><td>' + el.name + '</td><td>' + el.email + '</td><td>' + el.category + '</td><td>' + el.address + '</td><td>' + '<button onClick={console.log(el)} class="btn btn-primary">delete</button>'
               );
           });
         });
         $('body').addClass('stop-scrolling');
       })
  },

【问题讨论】:

  • this 的上下文是否正确分配?
  • 切换到使用箭头函数,以便this 绑定到您的 React 组件。此外,在使用 React 的同时使用 jQuery 进行 DOM 操作是一种代码异味/反模式。
  • 您必须将其绑定到类范围:这是一篇好文章:medium.com/@housecor/…

标签: javascript reactjs firebase


【解决方案1】:

您在回调函数中调用 this.setState,因此 this 不会进入预期的上下文。

您可以将this 的值存储在一个变量中:

componentDidMount: function(){
   var url = 'I have an api here';
   var self = this;

   axios.get(url).then(function(response){
     var arr = $.map(response.data, function(el) {
       $.each(el, function (i, word) {
         self.setState({el: el});
         $("#data").append('<tr><td>' + el.name + '</td><td>' + el.email + '</td><td>' + el.category + '</td><td>' + el.address + '</td><td>' + '<button onClick={console.log(el)} class="btn btn-primary">delete</button>');
       });
     });
     $('body').addClass('stop-scrolling');
   })
},

或者你可以使用箭头函数来解决你的问题

【讨论】:

  • 有更好的方法来绑定它。例如:medium.com/@housecor/…
  • 未捕获的类型错误:无法读取 HTMLButtonElement.onclick (VM23973 供应商?_k=2dp4j7:1) onclick @ VM23973 供应商处未定义的属性“el”?_k=2dp4j7:1
  • 这是另一个问题,response.data的值是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多