首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么在setState之后我的反应组件不改进型?

为什么在setState之后我的反应组件不改进型?
EN

Stack Overflow用户
提问于 2018-03-27 02:07:55
回答 2查看 1.6K关注 0票数 0

我对Reactive&Redux相当陌生,而且我还在和rerender机修工做斗争。

我正在编写一个简单的ToDo应用程序。这是我的ToDoList课程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ToDoList extends Component<Props, State> {
    constructor(props: Props) {
        super(props);
        this.state = {
            todoList: this.sortTodos(props.todoList)
        };
    }

    render = () => {
        return (
            <List>
                {this.state.todoList.map((todoItem, index) => 
                    <ToDo key={index} info={todoItem} />
                )}
            </List>
        );
    }

    componentWillMount = () => {
        if (this.state.todoList.length === 0)
            this.props.loadToDoList();
    }

    componentWillReceiveProps = (nextProps: Props) => {
        this.setState({ todoList: this.sortTodos(nextProps.todoList) });
    }

    sortTodos = (todos: ToDoModel[]) => {
        return todos.sort((a, b) => a.completed === b.completed ? 0 : a.completed ? 1 : -1)
    }
}

当我检查一个todo时,我的ToDoModel被更新,componentWillReceiveProps被调用。

我试图计算已完成的待办事项数量,并在componentWillReceiveProps中的状态中设置这个数字。但是,由于某种原因,我的待办事项列表不会按更新的顺序重新排列,即使函数末尾有一个this.forceUpdate()。(实际上,直到我重新加载屏幕,才会检查和重新排序我的待办事项。)

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-27 02:21:47

可能是因为keyTodo项目中。尝试将键设置为项的id

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<List>
  {this.state.todoList.map((todoItem, index) => 
    <ToDo key={todoItem.id} info={todoItem} />
  )}
</List>
票数 2
EN

Stack Overflow用户

发布于 2018-03-27 02:17:58

内部映射试图返回组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{this.state.todoList.map((todoItem, index) => 
  return <ToDo key={index} info={todoItem} />;
)}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49510066

复制
相关文章
React-组件-setState
为什么最终的一个值是1, 不是 3 呢是吧,我明明是进行增加了 3 次加 1 的操作,因为 setState 默认是一个异步的方法, 默认会收集一段时间内所有的更新, 然后再统一更新, 所以就导致了最终的一个值是 1, 不是 3,博主可以大致的提供一下它底层的实现代码这样可以更加的让你对 setState 有更深层次的理解,如下:
杨不易呀
2023/09/30
1900
组件分享之后端组件——在Golang中最长用的日志组件zap
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。
cn華少
2022/04/24
4700
组件分享之后端组件——在Golang中最长用的日志组件zap
为什么我不建议你用 Select * ?
应用程序慢如牛,原因多多,可能是网络的原因、可能是系统架构的原因,还有可能是数据库的原因。
JavaFish
2019/10/17
1.7K0
为什么我不建议你写注释?
实际上,注释最多也就是一种必须的恶。若编程语言足够有表达力,或者我们擅长于用这些语言来表达意图,就不那么需要注释了,甚至也许根本不需要。 注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败,我用了失败一词,其实是说真的。注释总是一种失败,是因为我们无法找到不用注释就能表达这段代码含义的方法。 如果你发现你的代码需要写注释,那么你就应该想想是不是有办法翻盘,用代码来表达。并不是不让你真的不用注释,而是有些时候,用注释是因为我们怕其他的开发者在我们的代码的时候,看不懂我们的代码从而去加注释,那么我们为什么不写出其他开发者一目了然的代码呢?
用户7386338
2020/05/29
1.2K0
为什么我的自动化流程不执行
很多人经常会有这个问题,为什么我的自动化流程不执行。如果你设置好了自动化流程,但是自动化流程却没有执行,请按照如下的顺序检查你的流程配置:
阿那个沫
2022/11/08
1.5K0
为什么我的自动化流程不执行
组件分享之后端组件——在Go中实现的断路器gobreaker
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
cn華少
2022/05/20
1.1K0
问:React的setState为什么是异步的?
不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?我一度认为 setState() 是同步的,知道它是异步的之后很是困惑,甚至期待 React 能出一个 setStateSync() 之类的 API。同样有此疑问的还有 MobX 的作者 Michel Weststrate,他认为经常听到的答案都很容易反驳,并认为这可能是一个历史包袱,所以开了一个 issue 询问真正的原因。最终这个 issue 得到了 React 核心成员 Dan Abramov 的回复,Dan 的回复表明这不是一个历史包袱,而是一个经过深思熟虑的设计。
beifeng1996
2022/10/01
9540
React中的setState为什么是异步的?
不知道大家有没有过这个疑问,React 中 setState() 为什么是异步的?我一度认为 setState() 是同步的,知道它是异步的之后很是困惑,甚至期待 React 能出一个 setStateSync() 之类的 API。同样有此疑问的还有 MobX 的作者 Michel Weststrate,他认为经常听到的答案都很容易反驳,并认为这可能是一个历史包袱,所以开了一个 issue 询问真正的原因。最终这个 issue 得到了 React 核心成员 Dan Abramov 的回复,Dan 的回复表明这不是一个历史包袱,而是一个经过深思熟虑的设计。
beifeng1996
2022/12/19
1.5K0
为什么我不建议自研BI系统?
互联网的本质之一是信息共享,而共享的背后是各种原子粒度的数据流动。有以内容生产和内容消费匹配为目的的数据流动,比如搜索引擎;也有以人、货、场信息匹配为目的的数据流动,比如电商平台。
IT阅读排行榜
2023/02/13
7670
为什么我不建议自研BI系统?
为什么我不建议你用 if-else ?
程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个 if-else,可随着代码逻辑不断完善和业务的瞬息万变:比如需要对入参进行类型和值进行判断;这里要判断下对象是否为 null;不同类型执行不同的流程。
开发者技术前线
2020/11/23
2.1K0
为什么我不建议你用 if-else ?
为什么我不推荐在windows子系统下通过pip安装Jupyter
知识这东西就需要经常去使用,这不换一台电脑python3都要重新安装 Jupyter notebook,还真遇到了一些问题。搜了一下并没有在win10下出现相似问题的推文,这里就记录一下报错和整合解决方案吧。
生信菜鸟团
2021/05/24
1.4K0
为什么我不推荐在windows子系统下通过pip安装Jupyter
使用两年之后,我为什么卸载了Istio?
作者 | Eric Fossas 译者 | 刘雅梦 策划 | Tina 在生产中使用了 Istio 近两年之后,我们要和它说再见了。 服务网络大战正在肆虐。现在我把票投给了 Linkerd。 服务网格提供了微服务之间的流量监控,包括服务通信的映射和在它们之间生成的 HTTP 状态码。通过添加服务网格,你可以在服务间添加 mTLS,或者换句话说,可以在服务间添加加密的 HTTP 通信。 在我看来,这两个工具几乎对所有人都很有用。许多服务网格都提供了诸如流量分割、重试、超时等高级功能。我很少相信这些功能是有用的
深度学习与Python
2023/04/01
7470
使用两年之后,我为什么卸载了Istio?
为什么我用了Redis之后,系统的性能却没有提升
很多时候,我们在面对一些热点数据的时候,通常会选择将热点数据放到redis中,以减少数据库的查询,减轻数据库的压力。但是如果我们使用redis的方式不对,那么可能导致系统的性能不升反降。
Java进阶之路
2022/08/03
1.9K0
为什么我用了Redis之后,系统的性能却没有提升
组件分享之后端组件——在Golang中快速读取和创建Excel
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
cn華少
2022/04/02
1.3K0
我为什么不建议你使用Python3.7.3?
之前使用Python的环境一直是Python3.7.3的,一直使用的很正常,没有什么毛病,直到最近做一个图片下载器的时候发现了问题。
云爬虫技术研究笔记
2019/11/05
2.1K0
我为什么不建议你使用Python3.7.3?
为什么不建议在 Docker 中跑 MySQL?
—1— 前言 容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够正常运行”这一问题。 目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以:数据库 MySQL 是否需要容器化? 认真分析大家的各种观点,发现赞同者仅仅是从容器优势的角度来阐述 MySQL 需要容器化,几乎没有什么业务场景进行验证自己的观点;反过来再看反对者,他们从性能、数据安全等多个因素进行阐述 MySQL不需要容器化,也举证了一些不适合的业务场景。下
玄姐谈AGI
2022/03/03
3.5K0
组件分享之后端组件——Golang中的ORM组件gorm
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
cn華少
2022/03/06
1.2K0
组件分享之后端组件——在gin中有效使用go-oauth2的组件gin-server
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。
cn華少
2022/05/23
7260
为什么不建议在 for 循环里捕捉异常?
在回答标题这个问题之前,我们先试想一下,在没有 try…catch 的情况下,如果想要对函数的异常结果进行判断,我们应该怎么做?
出其东门
2020/09/02
2.2K0
点击加载更多

相似问题

组件在setState之后不更新

21

为什么组件在调用setState()之后不更新其内容?

210

为什么我的组件不在setState之后重新呈现?

20

在setstate之后反应不以可视方式更新子组件

20

反应。setState不更新子组件的状态。

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

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