【发布时间】:2018-10-15 20:01:19
【问题描述】:
我快被这个弄疯了。我在我的应用程序中使用react-select,因为我的表单很大,所以我创建了一个小组件来像这样包装 Selects:
const SelectField = (props) => {
const { id } = props;
return (
<Select
id={id}
value={this.state[id]}
onChange={(value) => { this.onChangeValue({ target: { id, value } }); }}
options={options[id]}
placeholder="Please select..."
/>
);
};
我是这样使用它的:
<SelectField id="gender" />
onChangeValue 方法处理所有输入的setState:
onChangeValue(e) {
const { id, value } = e.target;
this.setState({ [id]: value });
}
由于某些奇怪的原因 react-select 没有返回 event 我只是模拟它传递我需要的数据。
这个版本的代码似乎可以按预期工作,如果我选择了一些东西,我可以在输入中正确地看到正确的值。不幸的是,在该值不正确的状态下,它应该是string,但它是整个选项:{ label: 'Gender', value: 'Male'}。
所以这里我已经不明白react-select如果value的结果是这个对象,怎么能显示Male。
如果我像下面这样更改onChange:
onChange={(value) => { this.onChangeValue({ target: { id, value: value.value } }); }}
这对我来说更有意义,因为我直接将正确的值传递给要在状态中设置的值。
突然间,这根本不起作用。如果我选择一个选项,输入仍会显示占位符,但是,是的,状态是正确的。
我尝试添加几个解决方法,但没有一个按预期工作。
我需要将所选值显示给选择,并且还需要将状态(在我的示例中为性别)作为带有值的字符串,而不是整个对象...
我在这里做错了什么?想法?干杯
【问题讨论】:
-
您似乎将 SelectField 声明为无状态组件,然后在其中调用 .setState ,这是行不通的。
-
你能举个例子吗,谢谢!
-
当你将一个 React 组件声明为一个函数时(这里:
const SelectField = (props) => ...)你将它声明为 stateless,这意味着你没有 this.state,实际上是因为这是一个箭头功能,您甚至根本没有this。我会推荐你参考 react 文档来了解这一点。声明组件的另一种方法是作为类class SelectField extends React.Component { ...,您可以访问this.setState
标签: javascript reactjs react-select