问题描述
我正在使用PrimeReact,并且有一个人员数据表:
选择任何行时,将显示一个带有下拉菜单,复选框和文本输入的子面板:
文本输入代码:
<div className="p-col-4">
<InputText id="first-name"
value={this.state.selectedEntity.firstName}
onChange={(e) => this.setState(state => (state.selectedEntity.firstName = e.target.value))} />
</div>
我将名的状态保留在名为selectedEntity
的嵌套属性中。那是关于setState
调用中唯一的非直截了当的构造。但是,这会在我键入以下内容时给我浏览器错误:
问题:
怎么了?
这是PrimeReact中的错误吗?
我正在使用PrimeReact 5.0.0-rc2。
编辑1:
顺便说一下,您在此处看到的下拉菜单和复选框似乎与箭头功能配合使用。相似代码:
下拉菜单:
<div className="p-col-4">
<Dropdown optionLabel="name"
optionValue="gender"
value={this.state.selectedEntity.gender}
options={[{"gender": "MALE","name": "Mr"},{"gender": "FEMALE","name": "Mrs"}]}
onChange={(e) => this.setState(state => (state.selectedEntity.gender = e.value))}
placeholder="Select a gender" />
</div>
复选框:
<div className="p-col-4">
<CheckBox inputId="incognito"
value="Incognito"
checked={this.state.selectedEntity.incognito}
onChange={(e) => this.setState(state => (state.selectedEntity.incognito = e.checked))} />
</div>
编辑2:
https://codesandbox.io/s/primereact-test-forked-4blln?file=/src/index.js
对我来说像个虫子...
解决方法
要使InputText
的{{1}}事件处理程序接受给定形式的箭头功能,还必须在onChange
之前使用e.persist()
:
所以不是
setState( ... )
使用
onChange={(e) =>
this.setState((state) => (state.selectedEntity.firstName = e.target.value))
}
请参阅
github.com/primefaces/primereact/issues/1600
完整的讨论。
PS:在撰写本文时,onChange={(e) => {
e.persist();
this.setState((state) => (state.selectedEntity.firstName = e.target.value))
}}
和Dropdown
组件为何不需要此答案的答案仍待定。