美文网首页
react类组件实例

react类组件实例

作者: 龙猫六六 | 来源:发表于2020-11-30 14:35 被阅读0次

目的:

用react类组件完成一个todolist的demo,巩固最近学习的react的知识点

git地址:

https://github.com/jc5055/ReactDemo

框架介绍

image.png

redux:

redux的由action,reducer,store三部分组成,其中action理解为的行为类型,reducer理解为行为操作,store理解为行为作用的结果,action必须通过reducer才能修改store里面的指

actions:

actions使用APIcreateActions来定义多个action,基本形式[action.type]:(par1)=>{ return par1}

import {createActions} from 'redux-actions'

export default createActions({
    [actionType.GET_ALL_TODO]: () => {
    },
    [actionType.DEL_ONE_TODO]: (todoId) => {
        return todoId
    },
})

reducer

针对不通的行为类型,reducer定义对应的行为操作,实现store存储的属性更新。
定义action中是用来createActions,因此reducer对应配合使用handleActions来完成行为操作的映射。
reducer = handleActions(handlers:{[action.type]:(state, action)=>{retuen}}, defalutState)

export const todoReducer = handleActions({
    [actionType.GET_ALL_TODO]: (state, action) => {...},
    [actionType.ADD_ONE_TODO]: (state, action) => {...},
    [actionType.DEL_ONE_TODO]:  (state, action) => {...},
    [actionType.CHANGE_ONE_TODO]:  (state, action) => {...},
    [actionType.DEL_FINISHED_TODO]:  (state, action) => {...},
    [actionType.IS_CHECKED_ALL_TODO]:  (state, action) => {...},
}, defaultState)

行为类型和行为操作映射:[actionType.GET_ALL_TODO]: (state, action) => {...},
reducer的默认值:defaultState

针对大型项目,reducer对应的行为操作会不断增加,为了让代码有更好的可维护性,将reducer进行分拆,使每个reducer只更新state的部分属性,实现代码的解耦合,具体使用的API函数为combineReducers

import {combineReducers} from 'redux'
import {todoReducer} from './todoReducer'

export const reducer = combineReducers({
    todoReducer : todoReducer
})

combineReducers:将不通的reducer合并成一个reducer,并作为createStore的传参
todoReducer : todoReducer:采用key:value的形式实现不同的reducer的store的属性值更新。如connec中的mapStateToProps中的属性值声明,具体如

const mapStateToProps = (state) => {
    return {
        todos: state.todoReducer.todos
    }
}

todos属性只在todoReducerreducer中定义,因此要使用state.todoReducer.todos才能获取正确的值

store:

理解为数据库,所有的属性都存放在store,只有reducer能够更新store里面存储的值

import {createStore, applyMiddleware, compose} from 'redux'
import createSagaMiddleware from 'redux-saga'
import {reducer} from './reducer/index'
import mySaga from "./sagas";

const sagaMiddleWare = createSagaMiddleware()
const store = createStore(reducer, applyMiddleware(sagaMiddleWare))

sagaMiddleWare.run(mySaga)

export default store

const store = createStore(reducer, applyMiddleware(sagaMiddleWare)),将定义好的reducer传递给API函数createStore,则reducer就与store形成了关联

react-redux

react-redux是在redux基础上应运而生的,通过react-redux 的标签<Provider>和基础API connect实现store属性变化的实时同步

标签<Provider>`

<Provider>标签包裹根标签,使得根标签下的子标签能够完成store属性变化的更新

ReactDOM.render(
    <Provider store={store}>
        <App/>
    </Provider>,
    document.getElementById('root')
);

connect

connect的API使用,将store的属性值同步/action派发到控件props。基本用法export default connect(mapStateToProps, mapDispatchToProps)(App);

属性同步mapStateToProps
const mapStateToProps = (state) => {
    return {
        todos: state.todoReducer.todos
    }
}

state:作为箭头函数的传参,表示store里面的存储数据的集合
todos: state.todoReducer.todos:demo采用combineReducers将子reducer进行融合,在使用过程中,todoReducer.todos表示使用reducer子reducer中的todoReducer的属性todos给当前控件todos进行赋值

action派发mapDispatchToProps
export default connect(mapStateToProps, {
    getAllTodos: actions.getAllTodo,
})(App);

mapDispatchToProps:{getAllTodos: actions.getAllTodo}
getAllTodos:表示映射到当前组件的行为属性
actions.getAllTodo:actions为所有行为,getAllTodo为具体行为。注意demo中使用的是createActionsAPI,通过createActions定义的action,为返回一个行为名,行为名的命名规范是去除下划线后采用驼峰形式。如

 //actionsType.js
const GET_ALL_TODO = 'get_all_todo'

//action.js
 [actionType.GET_ALL_TODO]: () => {},

//则通过action调用对应的action行为名为getAllTodo
export default connect(mapStateToProps, {
    getAllTodos: actions.getAllTodo, //此处
})(App);

相关文章

  • react类组件实例

    目的: 用react类组件完成一个todolist的demo,巩固最近学习的react的知识点 git地址: ht...

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • React 生命周期

    函数式组件肯定是无状态组件,类组件可以是无状态组件也可以是有状态组件 生命周期:即react实例从创建到销毁的执行...

  • React 生命周期

    函数式组件肯定是无状态组件,类组件可以是无状态组件也可以是有状态组件 生命周期:即react实例从创建到销毁的执行...

  • React组件生命周期

    react组件生命周期一个React组件的生命周期分为实例化,存在期,销毁 实例化 组件在客户端被实例化,第一次被...

  • react生命周期

    react生命周琦 1 实例(挂载、装载) 1.1 getDefaultProps 该组件类仅调用一次,返回可用于...

  • React Hooks

    前言 React中组件分为两大类:Class类式组件、函数式组件 React v16.8以前: Class类式组件...

  • 最新面试集合

    react 1,react类组件和函数组件区别 函数组件:function Welcome (props) {re...

  • Notes On React - Two

    React 的生命周期   React组件 的生命周期大致可分成四个状态:  - Mounting:装配-组件实例...

  • 07-02-React 类组件

    目标 掌握类组件的定义和使用; 掌握 React 组件间通信的方式; 掌握类组件的生命周期。 内容 在 React...

网友评论

      本文标题:react类组件实例

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