React学习笔记19-受控组件
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-非父子通信(订阅发布模式)1.受控组件的定义
React组件的数据渲染是否被调用者传递的 props 完全控制,完全控制则为受控组件,否则非受控组件。即React 的 state 成为组件的唯一数据源。
下面用一个小案例来演示,案例中todolist组件的唯一数据源就是State,todolist组件就是一个受控组件
import React, { Component } from 'react' import "../01-base/css/01-index.css" export default class App extends Component { constructor() { super() this.state = { list: [], todotext: '' } } render() { return ( <div> <input type="text" value={this.state.todotext} onChange={ (e) => { this.setState({ todotext: e.target.value }) } } /> <button onClick={ () => { const newlist = [...this.state.list] newlist.push({ todotext: this.state.todotext, check: false }) this.setState({ list: newlist, todotext: '' }) } }>add</button> <ul> {this.state.list.map((item, index) => { return <li key={index}> <input type="checkbox" checked={item.check} onChange={ () => { this.handlerCheck(index) } } /> <span style={ { textDecoration: item.check && "line-through" } }> {item.todotext} </span> {item.check && <span>完成</span>} <button onClick={ (e) => { console.log(e) const newlist = this.state.list newlist.splice(index, 1) this.setState({ list: newlist }) } }>删除</button></li> })} </ul> <div className={this.state.list.length ? 'hidden' : ""}>暂无代办事项</div> </div> ) } handlerCheck(index) { let newlist = [...this.state.list] newlist[index].check = !newlist[index].check this.setState({ list: newlist }) } }
2.受控组件的优势
受控组件的数据源只有一个有利于复杂组件的维护。
3.受控组件的劣势
对于受控组件来说,输入的值始终由 React 的 state 驱动。你也可以将 value 传递给其他 UI 元素,或者通过其他
事件处理函数重置,但这意味着你需要编写更多的代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix