【问题标题】:react js setstate inside event inline function在事件内联函数中反应js setstate
【发布时间】:2019-11-06 09:47:07
【问题描述】:

我想验证重复值的表下拉列表

//////////////

//////////////

我想在 setState 中为表下拉重复值设置错误属性,我尝试在内联函数中进行。但我认为这种方式是不可能的。

    </TableRow>
{
    item.map(k => (
        <TableRow >

            <TableCell >
                <select  onChange={function(e){
                     item.forEach(k1 => {
                        if(k1.key===e.target.value)
                        {

                       this.setState({
                          err:'duplicate'
                         })                 
                            console.log(err)
                        }
                        else
                        {
                            k.key=e.target.value
                            this.setState({
                             err:''
                               })
                        }
                     })
                     }}>

            </select>

            </TableCell>
            </TableRow>

如果我尝试在类中创建和绑定函数,更改一个下拉列表会更改所有下拉列表 请建议我如何做内联函数中的状态

【问题讨论】:

  • k.key=e.target.value中的k来自哪里?
  • k 来自 item.map(k => ( 在初始行中

标签: reactjs select setstate


【解决方案1】:

您根本不需要内联执行此操作。我看到您尝试内联的动机,因为您需要从循环中访问 item,但您可以将该元素发送到函数而不内联:

const onSelectchange = (e, k) => {
   item.forEach(k1 => {
      if(k1.key===e.target.value)
      {

     this.setState({
        err:'duplicate'
       })                 
          console.log(err)
      }
      else
      {
          k.key=e.target.value
          this.setState({
           err:''
             })
      }
   })
 }


return(</TableRow>
  {
  item.map(k => (
  <TableCell >
      <select  onChange={(e) => onSelectchange(e, k)}>

  </select>

  </TableCell>
</TableRow>)

您可以创建一个内联匿名函数并将eitem 传递给该函数,然后像内联一样执行它。

如果您担心内联匿名函数的“性能”,请不要担心。这是一种神话。

确保您没有语法错误,因为现在代码不正确,无法简单地复制粘贴。

【讨论】:

  • 但是在你的函数中 k.key 不接受 .. 它说 .. k 是未定义的
  • 我已经测试过这个功能..它不工作。它对你有用吗?
  • 我犯了菜鸟错误!触发函数时,item 将未定义。现在编辑它。
  • 已编辑@NeerajVerma,该函数正在发送您应该可以在组件内部访问的item,它必须传递k,而不是您需要从循环中获得的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2018-05-11
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多