文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

React 保留和重置State

2024-04-02 19:55

关注

前言

在开发时,我们复用一个组件,比如说切换不同的聊天窗口,这个窗口是公用的组件<Chat/>聊天窗口、<ContactList/>组件,控制不同人的id去切换不同的窗口和一个父组件<Messenger/>

<Chat/>包含的state值:text

import { useState } from 'react';
export default function Chat({ contact }) {
  const [text, setText] = useState('');
  return (
    <section className="chat">
      <textarea
        value={text}
        placeholder={'Chat to ' + contact.name}
        onChange={e => setText(e.target.value)}
      />
      <br />
      <button>Send to {contact.email}</button>
    </section>
  );
}

<ContactList/>触发setTo改变To的值。

export default function ContactList({
  selectedContact,
  contacts,
  onSelect
}) {
  return (
    <section className="contact-list">
      <ul>
        {contacts.map(contact =>
          <li key={contact.id}>
            <button onClick={() => {
             // 调用setTo改变To的值
              onSelect(contact);
            }}>
              {contact.name}
            </button>
          </li>
        )}
      </ul>
    </section>
  );
}

<Messenger/>管理state值:To

当我们在侧边栏切换不同的tab的时候,里面输入的内容没有重置。

因为组件的JSX位置不变,且state是独立的,每次传递新的props值to,即使会重新渲染,但并不会改变子组件已有的state值。

之前我的解决方法:

有没有更好的解决方法?答案是有的,这就涉及到了子组件state的重置与保留。

一、state保留

当在父组件中引入一个子组件,就会在对应的UI tree上分配到一个位置,如果这个UI tree的位置一直没有被修改,那么它的state值也就不会发生改变。

这种说白了,只是props值改变,子组件state依旧保留。因为组件并没有从触发 (存在-->消失-->出现) 的情况。

二、state重置

如果要让上面的组件里state重置,就需要在其中一个组件套着任意标签,组件将会出 (存在-->消失-->出现) 的情况。

单击复选框时,计数器状态将重置。虽然呈现了Counter,但该div的第一个子元素从div变为section。section从DOM中移除时,它下面的整个树(包括Counter和它的状态)也会被销毁。

添加key值是最佳重置子组件state的解决方案。

优化前

优化后

总结

以上就是React 保留和重置State的详细内容,更多关于React 保留重置State的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯