首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >React:如何“记住”最初的道具

React:如何“记住”最初的道具
EN

Stack Overflow用户
提问于 2017-08-27 20:39:27
回答 4查看 738关注 0票数 0

我正在使用React和Redux,并构建了一个简单的todo-app。现在,我想为用户创建一个保存按钮,它将保存对待办事项所做的任何更改(例如,更改文本)。因此,保存按钮需要以某种方式知道是否对待办事项进行了任何更改。

例如,最初我们有这些来自Redux的待办事项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const todos = [
    {
        id: 0,
        text: 'Learn Redux',
    },
    {
        id: 1,
        text: 'Learn React',
    }
]

但是用户对待办事项做了一些更改!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const todos = [
    {
        id: 0,
        text: 'Eat a cookie',
    },
    {
        id: 1,
        text: 'Read a book',
    }
]

所以我的问题是,我如何才能检测到这些变化?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-28 07:39:20

因为这样做的重点是学习React + Redux的最佳实践,所以最好的方法是让你的道具成为来自Redux状态的待办事项,然后让你的组件状态成为当前正在变化的状态。因此,在上面的示例中,

提供给组件属性的Redux状态是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const todos = [
    {
        id: 0,
        text: 'Learn Redux',
    },
    {
        id: 1,
        text: 'Learn React',
    }
]

然后组件状态是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const todos = [
    {
        id: 0,
        text: 'Eat a cookie',
    },
    {
        id: 1,
        text: 'Read a book',
    }
]

在你的构造函数中,你可以这样做(_是一个像lodash这样的库):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constructor(props) {
   super(props);
   this.state = { todos: _.clone(props.todos) };
}

该组件只会操作this.state.todos,然后当您准备保存时,您可以将this.state.todosthis.props.todos进行比较,以了解情况发生了怎样的变化。

然后,发送将待办事项保存到redux状态的操作(例如:save(this.state.todos)

你的组件应该通过像reselect这样的库来监听Redux的状态,并且它的属性会被更新。

票数 0
EN

Stack Overflow用户

发布于 2017-08-27 22:17:48

有很多方法可以做到这一点。您可以使用构造函数来记住初始属性,方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constructor(props) {
   super(props);
   this.initialProps = props;
}

由于您使用的是redux,因此您也可以在中间件中处理此问题,中间件的主要工作是检查并查看您尝试保存的数据是否与存储中保存的值不同。Here是redux中的中间件文档。

票数 0
EN

Stack Overflow用户

发布于 2017-08-28 01:17:35

当您调度一个更改待办事项的操作时,您可以调度一个操作来通知保存按钮。另外,如果你的reducer是纯的,它不会改变之前的状态,所以很容易知道待办事项是否改变了。如果对象引用不同,则会更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45909141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文