Redux中的Component和Container有什么区别

Redux中的Component和Container有什么区别

Redux 是一个用于JavaScript应用程序的状态管理库,它有助于将应用程序的状态存储和管理在一个单一的store中,使得在应用程序不断增长时更容易维护和更新状态。

Component: Redux中的Component是指一个根据传递给它的state和props来渲染UI的展示性组件。它被认为是一个”笨”组件,因为它不处理任何逻辑或状态更新。

语法:

import React from 'react';

const Component = ({ state, props }) => {
    return (
        <div>
            <p>{state.value}</p>
        </div>
    );
};

export default Component;

优点:

  • 容易编写和理解。
  • 可重复使用。
  • 可以独立测试。

缺点:

  • 无法访问Redux存储。
  • 逻辑能力或状态更新能力有限。

示例: 这个组件接受一个用户数组作为props,并渲染一个用户列表。

App.js

import "./App.css"; 
import React, { useState } from 'react'; 
import UserList from './UserList'; 
  
const App = () => { 
    const [users, setUsers] = useState([ 
        { id: 1, name: 'Dhruv Rawat' }, 
        { id: 2, name: 'Vinoba Bhave' }, 
        { id: 3, name: 'Medha Patkar.' }, 
    ]); 
  
    return ( 
        <div> 
            <h1>User List</h1> 
            <UserList users={users} /> 
        </div> 
    ); 
}; 
  
export default App;

UserList.js

import React from 'react'; 
  
const UserList = ({ users }) => ( 
    <ul> 
        {users.map(user => ( 
            <li key={user.id}>{user.name}</li> 
        ))} 
    </ul> 
); 
  
export default UserList;

输出:

Redux中的Component和Container有什么区别

容器:

在Redux中,容器指的是连接到Redux存储的组件,负责调度操作并更新状态。它被认为是一个“智能”组件,因为它处理逻辑和状态更新。

语法:

import { connect } from 'react-redux';
import Component from './Component';

function mapStateToProps(state) {
    return {
        data: state.data
    };
}

export default connect(mapStateToProps)(Component);

优点:

  • 可以访问Redux存储和dispatch函数
  • 能够对状态进行逻辑和更新

缺点:

  • 编写和理解更复杂
  • 不可重用

示例: 此容器使用react-redux库中的connect函数连接到Redux存储库。mapStateToProps函数用于指定哪些部分的状态应作为props传递给组件。在此示例中,传递了整个用户状态。

App.js

import React from 'react'; 
import { Provider } from 'react-redux'; 
import store from './store'; 
import ConnectedUserList from './ConnectedUserList'; 
  
const App = () => ( 
    <Provider store={store}> 
        <ConnectedUserList /> 
    </Provider> 
); 
  
export default App;

UserList.js

import React from 'react'; 
  
const UserList = ({ users }) => ( 
    <ul> 
        {users.map(user => ( 
            <li key={user.id}>{user.name}</li> 
        ))} 
    </ul> 
); 
  
export default UserList;

ConnectedUserList.js

import { connect } from 'react-redux'; 
import UserList from './UserList'; 
  
const mapStateToProps = state => ({ 
    users: state.users, 
}); 
  
export default connect(mapStateToProps)(UserList);

storage.js

import { createStore } from 'redux'; 
  
const initialState = { 
    users: [ 
        { id: 1, name: 'Ridhiya Negi' }, 
        { id: 2, name: 'Geet Negi' }, 
    ], 
}; 
  
const rootReducer = (state = initialState, action) => state; 
  
export default createStore(rootReducer);

输出:

Redux中的Component和Container有什么区别

比较表格:

Component Container
根据状态和属性渲染用户界面。 分发动作并更新状态。
“笨拙”的组件。 “聪明”的组件。
易于编写和理解。 编写和理解较为复杂。
可重用 不可重用
无法访问Redux存储。 可以访问Redux存储和分发函数。
可以独立测试。 无法独立测试。
重点放在展示上。 重点放在数据管理上。

总结: 在Redux中,组件和容器的主要区别在于,组件负责渲染UI,而容器负责连接应用程序状态到组件并更新状态。组件简单、可重用、易于编写,而容器更复杂,处理逻辑和状态更新。通常建议将组件保持简单,将逻辑和状态管理分离到容器中。这种方法使得代码更易于维护、测试和调试。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程