在事件内联函数中反应js setstate

时间:2019-11-06 09:47:07

标签: reactjs select setstate

我想验证表下拉菜单中是否存在重复值

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

enter image description here

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

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

    </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>

如果我尝试在类中创建和绑定函数,则更改一个下拉菜单将更改所有下拉菜单 请建议我如何在内联函数中执行状态

1 个答案:

答案 0 :(得分:0)

根本不需要您进行内联。我看到了您尝试内联执行此操作的动机,因为您需要从循环访问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传递给该函数,然后像执行内联一样执行它。

如果您担心具有内置匿名功能的“性能”,请不要担心。真是个神话。

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