【问题标题】:React.js: I used setstate but it still can't rerender at the same timeReact.js:我使用了 setstate 但它仍然不能同时重新渲染
【发布时间】:2021-08-31 19:10:06
【问题描述】:

我有一个列表,里面有很多对象,像这样:

[{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

【问题讨论】:

  • 您是如何获得该对象列表的?你能发布更多你的实际代码吗?

标签: javascript reactjs state setstate


【解决方案1】:

当您从数组中渲染对象时,它们需要具有唯一的key 属性。这让 React 可以跟踪它们,因此它可以知道在新渲染中需要更新哪些内容。

如果没有密钥,React 可能无法更新组件,因为它无法识别它们已更改,这就是您所看到的行为。

您可以在the docs阅读更多内容。

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2016-09-09
    • 2019-10-28
    • 2019-08-09
    • 2017-03-04
    • 2019-09-26
    相关资源
    最近更新 更多