美文网首页
React中UI组件和容器组件的拆分

React中UI组件和容器组件的拆分

作者: 泡杯感冒灵 | 来源:发表于2022-03-19 17:47 被阅读0次
UI组件,也叫傻瓜组件,负责页面的渲染。
容器组件,也叫聪明组件,负责处理逻辑。
拿todolist组件举例,todolist组件如何渲染,是有render函数决定的,todolist组件的逻辑,也都是写在这个组件中。当我们把组件的渲染和逻辑,都写在一个文件里的时候,后期的内容会比较多,维护会比较困难。于是我们需要对这个组件进行拆分,其中UI组件负责组件的渲染,容器组件负责组件的逻辑。
  • 创建一个TodoListUI.js 负责页面的渲染
import React,{Component} from 'react';
import 'antd/dist/antd.css';
import { Input,Button,List } from 'antd';

class TodoListUI extends Component {
    render(){
        return (
            <div style={{margin:'10px'}}>
                <div>
                    <Input 
                        value={this.props.inputValue}  
                        placeholder="todo info" 
                        style={{width:'300px',marginRight:'10px'}}
                        onChange={this.props.handleInputChange}
                    >
                    </Input>
                    <Button 
                        type="primary"
                        onClick={this.props.handleBtnClick}
                    >
                        提交
                    </Button>
                </div>
                <List
                    style={{marginTop:'10px',width:'300px'}}
                    bordered
                    dataSource={this.props.list}
                    renderItem={(item,index) => (<List.Item onClick={()=> {this.props.handleItemDelete(index)}}>{item}</List.Item>)}
                />
            </div>
        )
    }
}

export default TodoListUI;
  • 然后在TodoList的render函数里使用 TodoListUI组件,此时TodoList只负责业务逻辑
import React, {Component} from 'react';
import store from './store';
import {getInputChangeAction, getAddItemAction,getDeleteItemAction} from './store/actionCreators';
import TodoListUI  from './TodoListUI';

class TodoList extends Component {
    constructor(props){
        super(props);
        this.state = store.getState();
        this.handleInputChange = this.handleInputChange.bind(this);
        this.handleStoreChange = this.handleStoreChange.bind(this);
        this.handleBtnClick = this.handleBtnClick.bind(this);
        this.handleItemDelete = this.handleItemDelete.bind(this);
        store.subscribe(this.handleStoreChange);
    }
    render(){
        return (
            <TodoListUI 
                 inputValue = {this.state.inputValue}
                 list = {this.state.list}
                 handleInputChange = {this.handleInputChange}
                 handleBtnClick = {this.handleBtnClick}
                 handleItemDelete = {this.handleItemDelete}
                />
            );
    }
    handleInputChange(e){
        const action = getInputChangeAction(e.target.value);
        store.dispatch(action);
    }
    handleStoreChange(){
        this.setState(store.getState());
    }
    handleBtnClick(e){
        const action = getAddItemAction();
        store.dispatch(action);
    }
    handleItemDelete(index){
        const action = getDeleteItemAction(index);
        store.dispatch(action);
    }
}

export default TodoList;

相关文章

  • 【学习笔记 】React ⑧ react-redux的使用

    UI组件、容器组件、无状态组件 在学习react-redux之前,需要了解UI组件、容器组件和无状态组件的知识。 ...

  • React中UI组件与容器组件的拆分

    本篇文章,我们接着对React组件进行优化。React中存在UI组件和容器组件的概念。顾名思义,UI组件主要控制组...

  • React中UI组件和容器组件的拆分

    UI组件,也叫傻瓜组件,负责页面的渲染。 容器组件,也叫聪明组件,负责处理逻辑。 拿todolist组件举例,to...

  • react-redux connect方法

    1.组件 react-redux把组件分为两类:UI组件和容器组件。 UI组件的特征: 只负责 UI 的呈现,不带...

  • React-Redux

    UI 组件和容器组件 React-Redux 将所有组件分为两大类:UI ( presentational com...

  • 07.Redux进阶(上)

    UI组件和容器组件 在这个例子中,我们想要分离UI组件和容器组件 无状态组件 因为上面TodoListUI这个组件...

  • (二十三)UI组件与容器组件的拆分

    UI组件-页面渲染容器组件-页面逻辑 拆分这样的todolist 把页面渲染从 src\TodoList.js 中...

  • RN:React-Redux

    目录一. React-Redux是什么 1. React-Redux的组件拆分规范  1.1 UI组件  1.2 ...

  • 从 Redux 到 React-Redux

    在上篇文章中,我们用 React 结合 Redux 实现了一个小计算器,并将组件拆分为容器组件和木偶组件,本文再基...

  • 在mapDispatchToProps里操作数据this.set

      react-redux将所有组件分成两大类:UI组件和容器组件,组件内需要操作数据可以通过mapStateTo...

网友评论

      本文标题:React中UI组件和容器组件的拆分

      本文链接:https://www.haomeiwen.com/subject/sztndrtx.html