我的工作有到要求做出反应(与终极版)的组件上:从API端点如何更新react-redux中的商店状态?
- Retreive数据。
- 显示数据,其中一个字段是可编辑的。
- 如果可编辑字段为已编辑,则必须更新其余字段并将它们发送到不同的端点。
我无法掌握如何使用Redux metodology来实现编辑。
下面是一个简单的组件:
class MyComponent extends Component {
constructor(...args) {
super(...args);
this.props.dispatch(getDataFromEndpoint());
}
editField(e) {
this.props.dispatch(editFieldAction(e.target.value));
}
render() {
return (
<div>
<input type="text" defaultValue={this.props.data.editableField} onChange={this.editField} />
{
this.props.data.uneditable.map(x => {
return (
<span>{x}</span>
);
})
}
</div>
);
}
}
const mapProps = state => {
const { data } = state.endpointData;
return { data };
}
export default connect(mapProps)(MyComponent);
请注意,我已经写了这个组件为例,它可能有错误,但你应该明白了吧。每当调用this.editField
时,它应更新this.props.data.uneditable
中的每个值。
这样做的正确方法是什么?
换句话说,如果您想要更新本地和远程状态(即更新您的本地存储并使用相同的数据发送到服务器进行API调用),这对于thunk来说是个好例子,因为你既可以发送一个动作来更新你的本地存储,也可以在同一个thunk中发送API请求。 – John
伟大的探索。我应该传递给mapDispatchToProps函数,以及它需要什么参数,所以我可以更新storebstate? – ItsGreg
那么这只取决于你想如何在商店中建模数据。比方说,例如你有一个'人'的对象,其中包含字段'名称'和'地址'。你可以有两个不同的动作(比如'updateName'和'updateAddress'),在这种情况下,你可能只传入一个字符串,从你的文本输入的onChange事件中获取(用于新的输入值)。或者你可以有一个单独的动作(可能是'updatePerson'),它会包含更新后的人物对象,在这种情况下,你可以用整个人物对象分派一个动作;即使只有1个字段发生了变化 – John