javascript - React.js:我使用了 setstate 但它仍然不能同时重新渲染
问题描述
我有一个列表,其中包含许多对象,如下所示:
[{id: 3, kategori: 'Kultur', name: 'Topkapı Sarayı',},{id: 5, kategori: 'Diger',name: 'Topkapı Sarayı', description: "xxxx"},]
我想通过(上一个,下一个)按钮在卡片上一个一个地返回这个列表的对象。所以我创建了一个计数器并定义了增量(用于下一个按钮)和减少(用于上一个按钮)功能。然后我用这个计数器作为列表的索引。最后我像这样映射了这个列表:
this.viwedList = [ myList()[this.state.counter] ].map((tur) => (
<CreatContent
turName={tur.name}
img={tur.img}
country={tur.country}
increment={this.increment}
reduce={this.reduce}
/>
));
this.setState(() => {
return {
mainContent: this.viwedList
};
});
当我单击上一个和下一个按钮时,计数器值会增加和减少。主要问题是显示的对象不会立即更改,当我单击另一个类别(列表)然后返回同一张卡片时,它会更改。
[issua 的第一个图像][1] [issua 的第二个图像][2] [issua 的最后一个图像][3]
[1] : https ://i.stack.imgur.com/mjzRf.jpg [ 2 ]: https ://i.stack.imgur.com/7tCVA.jpg [3]: https://i.stack。 imgur.com/qqS2E.jpg
解决方案
当您从数组渲染对象时,它们需要具有唯一的key
属性。这让 React 可以跟踪它们,因此它可以知道在新渲染中需要更新哪些内容。
如果没有密钥,React 可能无法更新组件,因为它无法识别它们已更改,这就是您所看到的行为。
您可以在文档中阅读更多内容。
推荐阅读
- laravel - 在 Ubuntu 中安装 Laravel 后输入命令 php artisan ser 无法打开流:
- javascript - 获取将图片上传为base64而不是文件
- verilog - 错误:(vsim-3033) Ripple_counter.v(22):“JK_flip_flop”的实例化失败。未找到设计单位
- javascript - 我如何在 JS 中转换这个挑战?
- javascript - 无法为 document.getElementsByClassName() 定位的元素应用样式
- spring - 迁移到 SpringBoot 2 Mockito 3.x 后集成测试套件失败
- python - 为什么模型表单集不保存在 django 中
- tabs - 在 Microsoft 团队的自定义应用程序中添加选项卡
- android - 在互联网可用之前,如何安排我的 android 聊天应用程序消息
- c++ - 使用 CMake 将 winmm.lib 链接到 CLion