React学习笔记13-小案例toList(状态,状态维护,条件渲染渲染)
1.React学习笔记01-React的基本认识2.React学习笔记02-创建React项目3.React学习笔记03-编写第一个react应用程序4.React学习笔记04-JSX语法5.React学习笔记05-类组件6.React学习笔记06-函数式组件7.React学习笔记07-组件嵌套8.React学习笔记08- 组件的样式9.React学习笔记09- 事件处理10.React学习笔记10- Ref的应用11.React学习笔记11-状态(state)12.React学习笔记12-循环渲染
13.React学习笔记13-小案例toList(状态,状态维护,条件渲染渲染)
14.React学习笔记14-dangerousSetinnerHtml指令15.React学习笔记15-setState同步异步问题16.React学习笔记16-属性props17.React学习笔记17-属性VS状态18.React学习笔记18-非受控组件19.React学习笔记19-受控组件20.React学习笔记20-父子通信(子传父)21.React学习笔记21-非父子通信(状态提升)22.React学习笔记22-订阅发布模式23.React学习笔记23-非父子通信(订阅发布模式)写一个todoList小案例来体验一下组件的状态以及状态维护的注意点
import React, { Component } from 'react' import './css/01-index.css' export default class App extends Component { state = { tolist:[], inputValue:'' } render() { return ( <div> <input value={this.state.inputValue} onChange={ } type="text" /> <button onClick={ }>add</button> {this.state.tolist.map((item,index)=>{ return ( <div key={index}>{item}</div> ) })} {/* 条件渲染(动态创建/删除) 方案一:{this.state.tolist.length === 0 ? <div>暂无代办事项</div> : null} 方案二: {this.state.tolist.length === 0 && <div>暂无代办事项</div>} */} {/* 条件渲染(隐藏/显示) <div className={this.state.tolist.length ? 'hidden' : ""}>暂无代办事项</div> */} <div className={this.state.tolist.length>0 ? 'hidden' : ""}>暂无代办事项</div> </div> ) } }
先定义两个状态todolist存放代表事项,inputvalue用来控制input的value
再通过条件渲染的方式渲染缺省画面
再定义input和add按钮的事件回调用来存放和添加待办事件
import React, { Component } from 'react' import './css/01-index.css' export default class App extends Component { state = { tolist:[], inputValue:'' } render() { return ( <div> <input value={this.state.inputValue} onChange={ this.changeHanlder } type="text" /> <button onClick={ this.addHanler }>add</button> {this.state.tolist.map((item,index)=>{ return ( <div key={index}>{item}</div> ) })} {/* 条件渲染(动态创建/删除) 方案一:{this.state.tolist.length === 0 ? <div>暂无代办事项</div> : null} 方案二: {this.state.tolist.length === 0 && <div>暂无代办事项</div>} */} {/* 条件渲染(隐藏/显示) <div className={this.state.tolist.length ? 'hidden' : ""}>暂无代办事项</div> */} <div className={this.state.tolist.length>0 ? 'hidden' : ""}>暂无代办事项</div> </div> ) } changeHanlder = (e)=>{ this.setState({ inputValue:e.target.value }) } addHanler = ()=>{ /* 注意不要直接修改状态,会导致不可预期的错误 可以定义一个临时变量来对状态进行深拷贝,然后改变这个变量 再通过setState方法赋给状态 */ if(this.state.inputValue !==''){ const newlist = [...this.state.tolist] newlist.push(this.state.inputValue) this.setState({ tolist:newlist, inputValue:'' }) } } }
这里要注意的是:
要直接修改状态,会导致不可预期的错误
可以定义一个临时变量来对状态进行深拷贝,然后改变这个变量
再通过setState方法赋给状态
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix