组件的组合使用
组件的组合使用
步骤:
1)拆分组件: 拆分界面,抽取组件
2)实现静态组件: 使用组件实现静态页面效果
3)实现动态组件
① 动态显示初始化数据
② 交互功能(从绑定事件监听开始)
问题:数据保存在哪个组件内?
看数据是某个组件需要(给它),还是某些组件需要(给共同的父组件)
问题:子组件需要改变父组件的状态?
子组件不能直接改变父组件的状态,状态在哪个组件,更新状态的行为就在哪个组件
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="../js/react.development.js"></script> <script type="text/javascript" src="../js/react-dom.development.js"></script> <script type="text/javascript" src="../js/prop-types.js"></script> <script type="text/javascript" src="../js/babel.min.js"></script> </head> <body> <div id="example"></div> <script type="text/babel"> /* 1)拆分组件: 拆分界面,抽取组件 2)实现静态组件: 使用组件实现静态页面效果 3)实现动态组件 ① 动态显示初始化数据 ② 交互功能(从绑定事件监听开始) */ class App extends React.Component{ constructor(props){ super(props) this.state={ todos:['吃饭', '睡觉', '打豆豆'] } this.add = this.add.bind(this) } render(){ const {todos} = this.state return ( <div> <TodoAdd add={this.add} count={todos.length} ></TodoAdd> <TodoList todos={todos}></TodoList> </div> ) } add(todo){ const {todos} = this.state todos.unshift(todo) this.setState({todos}) } } class TodoAdd extends React.Component{ constructor(props){ super(props) this.addTodo = this.addTodo.bind(this); } addTodo(){ const value = this.todoInput.value.trim() if(!value){ return } //保存 this.props.add(value) //清除输入 this.todoInput.value='' } render(){ return ( <div> <h2>Simple TODO List</h2> <input type="text" ref={input=>this.todoInput=input}/> <button onClick={this.addTodo}>Add #{this.props.count + 1}</button> </div> ) } } TodoAdd.propTypes = { //add: PropTypes.func.isRequired, count: PropTypes.number.isRequired } class TodoList extends React.Component{ render(){ const {todos} = this.props return ( <ul> { todos.map((todo, index) => <li key={index}>{todo}</li>) } </ul> ) } } TodoList.propTypes = { todos: PropTypes.array.isRequired } //渲染应用组件标签 ReactDOM.render(<App/>,document.getElementById('example')) </script> </body> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具