当前位置: 首页 > 知识库问答 >
问题:

更新状态|对象不可iterable(无法读取属性符号(Symbol.iterator))

易宏阔
2023-03-14

我下面有JSX-

 <FormGroup>
                <Label for="exampleEmail" style={{fontWeight:"bold"}}>What is your e-mail address?</Label>
                <Input type="email" name="email" id="exampleEmail" onChange={(e)=>setStateForProperties(e)} />
            </FormGroup>
            <FormGroup>
                <Label for="examplePassword" style={{fontWeight:"bold"}}>What is your password?</Label>
                <Input type="password" name="password" id="examplePassword" onChange={(e)=>setStateForProperties(e)}/>
 </FormGroup>

国家声明-

  const iLoginCreds ={
    userName:'',
    password:''
  }
  const [loginCreds, setLoginCredentials] = useState(iLoginCreds)

onChange方法更改状态-

  function setStateForProperties(e)
  {
    alert(e.target.id);
    switch (e.target.id) {
      case 'exampleEmail':
        setLoginCredentials(...loginCreds,{
          userName:e.target.value
        
        });
            
        break;

        case 'examplePassword':
        setLoginCredentials(... loginCreds,{
          password:e.target.value
        });
    
      default:
        break;
    }
    console.log(loginCreds);
  }

错误-

当我在文本框中写入任何内容时(在onchange事件触发时),我收到一个错误-

TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))

共有2个答案

彭畅
2023-03-14

而不是这样做:

js prettyprint-override">setLoginCredentials(...loginCreds, {
  userName:e.target.value
});

,它将两个参数传递给useState,您应该将大括号移动到周围。。。loginCreds,如下所示:

setLoginCredentials({...loginCreds,
  userName:e.target.value
});

对于密码,您也应该这样做。

这将仅更改对象上的一个属性。将useState()与对象进行反应

邵轶
2023-03-14

您需要销毁以前的对象属性,并在与新对象合并后返回新对象

setLoginCredentials({ ...loginCreds, ...{userName:e.target.value} })

 类似资料:
  • 我是一个初学者,学习反应和还原。我写了这个关于如何在Redux中使用Connect.js的演示。搜索这类问题,但我的代码没有正确的答案。我得到了一个未定义的上下文。是错字吗?还是我以错误的方式传递了上下文?提前谢了。这是我的代码。 index.js /store/index.js Constants.js

  • 并不是所有的流操作都涉及到资源的操纵. 有时候也需要查看活动的流在某个时刻的状态, 或检查潜在可打开的资源的状态. 这一节流和包装器的ops函数都是在相同的数据结构php_stream_statbuf上工作的, 它只有一个元素: posix标准的struct statbuf. 当本节的某个函数被调用时, 将尝试填充尽可能多的statbuf元素的成员. stat 如果设置, 当请求激活流实例的信息时

  • 我在努力什么? 尝试在状态中设置输入类型文本的值 到目前为止我搜索了什么? 组件

  • 我是新来的node.js.我正在尝试创建一个注册页面,并使用mysql将输入的值保存在数据库中。 我可以通过在请求头上传递参数来实现这一点。但是,在请求头中传递参数始终不是一个好主意。所以尝试在请求体上传递参数。 我使用邮差测试我的node.js服务。 下面是我的演示应用程序的github链接 https://github.com/debasish283/node_gulp 我还需要做什么来传递请

  • 我有包含以下内容的属性文件: 我使用spring配置阅读了以下内容: 但在应用程序开始后,我看到: 我需要,因为我要使用重新启动程序:https://stackoverflow.com/a/3655963/2674303 如何避免这个错误?