React-redux总结

一.Redux介绍

Redux是一个用来管理管理数据状态和UI状态的JavaScript应用工具。随着JavaScript单页应用(SPA)开发日趋复杂,JavaScript需要管理比任何时候都要多的state(状态),Redux就是降低管理难度的。

二.Redux工作流程

官网图:
在这里插入图片描述
老司机图:
在这里插入图片描述
解释:React Components就相当于大官人,然后我们去作“大宝剑”,我们先见到的是Action Creators“妈妈桑”,我们说我要找小红,我是熟客了。"妈妈桑"就回到了Store,然后让Reducer看看"小红“忙不忙(现在的状态),如果不忙就让她过来配大官人。

三.准备制作项目(todoList项目)

1.安装项目,删除无用的文件,并创建初始文件
在这里插入图片描述
在这里插入图片描述
2.安装ant design

cnpm i antd --save

按需引入组件和样式

import {Input,Button,List} from 'antd'
import 'antd/dist/antd.css'

完善代码:

//快速生成imrc,ccc
import React, { Component } from 'react';
import {Input,Button,List} from 'antd'
import 'antd/dist/antd.css'

const data=[
'早8点开晨会,分配今天的开发工作',
'早9点和项目经理作开发需求讨论会',
'晚5:30对今日代码进行review'
]
class TodoList extends Component {
    constructor(props) {
        super(props);
        this.state = {  }
    }
    
    render() { 
        return (
             <div style={{margin:'10px'}}> 
                <div>
                <Input placeholder='Write something' style={{width:'250px',marginRight:'10px'}}></Input>
                <Button type='primary'>增加</Button>
                </div>
                <div style={{margin:'10px',width:'300px'}}>
                <List 
                bordered
                dataSource={data}
                renderItem={item=>{
                  return  <List.Item>
                        {item}
                    </List.Item>   
                }}
                >

                </List>
                </div>
            </div> 
        );
    }
}
 
export default TodoList;

效果:
在这里插入图片描述
注意点:
1.dataSource数据写在外面;
2.样式marginRight采用驼峰命名法;

四.redux开始

1.安装redux

cnpm i redux --save

2.因为所有数据都是要跟仓库沟通,所以第一步先创建仓库
新建一个store文件夹,新建index.js文件,在这个文件里

// 引入createStore方法
import {createStore} from 'redux';
//调用createStore方法
const store =createStore();
// 暴露出去
export default store;

3.在同一个文件夹里声明一个管理员reducer

// 设置默认数据
const defaultState={
}
//暴露一个方法,这个方法有两个参数:state,action,在方法里将state返回
export default (state=defaultState,action)=>{
    return state
}

4.回到store/index.js里,将管理员引入进来

在这里插入图片描述
5.回到管理员store/reducer.js里,将数据填进去
在这里插入图片描述
6.回到自己的todoList.js组件里,将仓库引入,调用仓库里的getState()方法,将里面的值赋值给this.state就有数据了
在这里插入图片描述
效果:
在这里插入图片描述

7.redux工具的使用:谷歌安装,在store/index.js的createStore()方法的参数二里加上这句话(不加无法查看redux数据)
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
8.通过Input值改变来完整体验一遍redux工作流程

先定义一个输入框的值改变事件,在事件里声明action对象,在action对象里必须有一个type值,另一个是事件对象的value值,然后在这个值改变事件里用store.dispatch(aciton)方法传给store,接着在reducer文件的函数里打印state和action发现,state就是原始值,action就是改变后的新值,我们根据action.type==='action里写的type’来创建一个新值(用对象的深拷贝,因为reducer是不能修改store里的值,所以要创建新值),将新值赋值给state里的旧值,最后返回出来新state.同时发现如果input输入框绑定了value属性的话,输入框输入不会发生变化,解决办法是在组件里采用订阅者模式让组件更新,操作过程是通过store.subscribe(this.方法),在方法里记得调用this.setState(store.getState())即可.
在这里插入图片描述
在这里插入图片描述

总结:

在这里插入图片描述

一句话:

redux是一个状态管理工具,用来管理应用中的数据.

核心:

分为三个部分
Action:是行为的抽象,视图中的每一个交互都是一个action,比如点击按钮.
Reducer:行为响应的抽象,也就是根据action行为执行响应的逻辑操作,从而更新state,比如:点击按钮后添加任务,那么这个添加任务这个逻辑就放到Reducer中.
Store:是储存数据的仓库.
1 Redux应用只能有一个store
2 getState():获取state
3 dispatch(action):更新state

(未完待续)

附一个写的redux写的非常好的播客,没有之一,地址:https://segmentfault.com/a/1190000015684895
我的参考源码:https://github.com/huanggengzhong/react-learn/tree/master/08-redux/redux-demo01

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值