我正在使用React和Redux,并构建了一个简单的todo-app。现在,我想为用户创建一个保存按钮,它将保存对待办事项所做的任何更改(例如,更改文本)。因此,保存按钮需要以某种方式知道是否对待办事项进行了任何更改。
例如,最初我们有这些来自Redux的待办事项:
const todos = [
{
id: 0,
text: 'Learn Redux',
},
{
id: 1,
text: 'Learn React',
}
]
但是用户对待办事项做了一些更改!
const todos = [
{
id: 0,
text: 'Eat a cookie',
},
{
id: 1,
text: 'Read a book',
}
]
所以我的问题是,我如何才能检测到这些变化?
发布于 2017-08-28 07:39:20
因为这样做的重点是学习React + Redux的最佳实践,所以最好的方法是让你的道具成为来自Redux状态的待办事项,然后让你的组件状态成为当前正在变化的状态。因此,在上面的示例中,
提供给组件属性的Redux状态是
const todos = [
{
id: 0,
text: 'Learn Redux',
},
{
id: 1,
text: 'Learn React',
}
]
然后组件状态是
const todos = [
{
id: 0,
text: 'Eat a cookie',
},
{
id: 1,
text: 'Read a book',
}
]
在你的构造函数中,你可以这样做(_是一个像lodash
这样的库):
constructor(props) {
super(props);
this.state = { todos: _.clone(props.todos) };
}
该组件只会操作this.state.todos
,然后当您准备保存时,您可以将this.state.todos
与this.props.todos
进行比较,以了解情况发生了怎样的变化。
然后,发送将待办事项保存到redux状态的操作(例如:save(this.state.todos)
你的组件应该通过像reselect
这样的库来监听Redux的状态,并且它的属性会被更新。
发布于 2017-08-27 22:17:48
有很多方法可以做到这一点。您可以使用构造函数来记住初始属性,方法如下:
constructor(props) {
super(props);
this.initialProps = props;
}
由于您使用的是redux,因此您也可以在中间件中处理此问题,中间件的主要工作是检查并查看您尝试保存的数据是否与存储中保存的值不同。Here是redux中的中间件文档。
发布于 2017-08-28 01:17:35
当您调度一个更改待办事项的操作时,您可以调度一个操作来通知保存按钮。另外,如果你的reducer是纯的,它不会改变之前的状态,所以很容易知道待办事项是否改变了。如果对象引用不同,则会更改。
https://stackoverflow.com/questions/45909141
复制相似问题