我可以将输入字段值设置为redux存储值吗?或者我可能需要将道具复制到我当地的州吗?
<input
placeholder={props.placeholder}
value={props.value}
/>
props.value来自react-redux的Connect。
但是我无法改变输入值,我认为这是因为道具是只读的
答案 0 :(得分:2)
您可以通过这种方式设置价值,这是正确的。要更改此类输入值,您必须添加onChange
事件处理程序,该处理程序将在Redux存储中调度更新相应值的操作(检查React doc about controlled form fields):
<input
placeholder={props.placeholder}
onChange={(event) => props.updateValueInRedux(event.target.value)}
value={props.value}
/>
在上面的示例中,updateValueInRedux
应该是从Redux connect
传递给组件的函数,作为mapDispatchToProps
参数的属性,它将调度更新Redux状态的操作。看起来应该是这样的:
const mapStateToProps = {
...
}
const mapDispatchToProps = (dispatch) => {
return {
updateValueInRedux: (value) => {
dispatch(someReduxUpdateAction(value));
}
}
};
const MyConnectedComponent = connect(
mapStateToProps,
mapDispatchToProps
)(MyComponent);
答案 1 :(得分:1)
为了补充Bartek的说法,你的行动可能如下:
//Action Creator
export const UPDATE_VALUE = 'UPDATE_VALUE';
export function updateValueInRedux(value) {
return ({
type: UPDATE_VALUE,
payload: value
});
}
//Reducer
import {
UPDATE_VALUE
} from './actions'; //[Or directory where your actions reside]
const INITIAL_STATE = {
value: ''
}
export default
const UpdaterReducer = (state = INITIAL_STATE, action) {
switch (action.type) {
case UPDATE_VALUE:
return { ...state,
value: action.payload
}
default:
return state;
}
}
//Now 'value' will be available to all components that have the reducer state mapped to their properties