【发布时间】:2017-06-14 20:10:27
【问题描述】:
我创建了一个非常简单的 yes/no 组件,它使用 redux 形式映射到 true/false 值。 单击“否”时,商店中的值会更新,但组件不会更新。 只有先单击“是”后,组件才会在单击“否”时更新。
我在这里做错了什么?为什么 store 中的状态没有反映在组件中?
请注意,对于我的用例而言,重要的是最初没有单击任何按钮。
沙盒:
https://codesandbox.io/s/r06VKjB4K
import React from 'react';
import { Field, reduxForm } from 'redux-form';
const buttonStyle = {
width: '50px',
display: 'inline-block',
border: '1px solid green',
margin: '5px',
padding: '5px',
cursor: 'pointer',
textAlign: 'center',
};
const ButtonBar = ({ options, input }) =>
<div style={{ display: 'block' }}>
{options.map(x =>
<div
onClick={() => {
input.onChange(x.value);
}}
style={{
...buttonStyle,
...{
backgroundColor: input.value === x.value ? x.selected : 'white',
},
}}
>
{x.displayName}
</div>,
)}
</div>;
const SimpleForm = props => {
return (
<form>
<div style={{ display: 'inline-block', border: '1px solid grey' }}>
<Field
name="myButton"
component={ButtonBar}
options={[
{
value: true,
displayName: 'Yes',
selected: 'green',
},
{
value: false,
displayName: 'No',
selected: 'red',
},
]}
/>
</div>
</form>
);
};
export default reduxForm({
form: 'simple', // a unique identifier for this form
})(SimpleForm);
【问题讨论】:
-
能不能不保持这样 input.value == x.value ?
-
@VivekN 不,我在我的问题中指出了为什么不
-
确实它与
true/false值有关。如果将它们替换为a和b,它会按预期工作。我对 redux-form 不是很熟悉,但文档可能会解释这一点。 -
因为 false 值和再次单击 No 时,该值变成了 false,就像它最初是一个空字符串一样,我假设 redux-form 将其视为 false。因为状态确实不改变,这就是为什么不重新渲染。
-
@WillemD'Haeseleer 而不是真假值,你能把它们保持为是或否
标签: javascript reactjs react-redux react-redux-form