React对 state 进行保留和重置 (默认行为导致的错误)
* ContactList.js export default function ContactList({ selectedContact, contacts, onSelect }) { return ( <section className="contact-list"> <ul> { contacts.map(contact => <li key={contact.email}> <button onClick={() => { onSelect(contact) }}> {contact.name} </button> </li>) } </ul> </section> ) } * Chat.js 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>发送给{contact.email}</button> </section> ) } * Message.js /** * 组件中对State进行保留和重置 🥑🥑🥑 * 重新渲染一个组件时,React需要决定组件树中的哪些部分需要保留、更新、丢弃或重新创建 * React会保留树中和之前渲染的组件树“匹配”的部分 * 可能出现的情况:输入内容后再切换收件人并不会清空输入框,可能会导致用户不小心发错消息 😃归因于React默认行为会保留部分状态 * 👨🚒 可通过向组件传递一个唯一key => <Chat key={mail}/> 来强制重置其状态 * 如果收件人不同,应将其作为一个不同的Chat组件,需要使用新数据和UI(eg:输入框)来重新创建 * 在接收者之间切换时就会重置输入框 ===》即使渲染的是同一个组件 */ import { useState } from "react"; import ContactList from './ContactList' import Chat from './Chat' const contacts = [ { name: 'Taylor', email: 'taylor@mail.com' }, { name: 'Alice', email: 'alice@mail.com' }, { name: 'Bob', email: 'bob@mail.com' } ]; function Messenger() { const [to, setTo] = useState(contacts[0]) return ( <> <main> <ContactList contacts={contacts} selectedContact={to} onSelect={contact => setTo(contact)} /> <Chat contact={to} key={to.email}/> </main> </> ); } export default Messenger;
学而不思则罔,思而不学则殆!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
2022-08-04 JavaScript 浏览器BOM
2022-08-04 JavaScript Number对象
2022-08-04 JavaScript Array对象知识点总结