创建Redux中的仓库-store和reducer

创建Redux中的仓库–store和reducer

一、安装redux

cnpm install --save redux

二、编写代码

tip:Redux 应用只有一个单一的 store。当需要拆分数据处理逻辑时,你应该使用 reducer 组合 而不是创建多个 store。

1- 安装好redux之后,在src目录下创建一个store文件夹,然后在文件夹下创建一个index.js文件。index.js就是整个项目的store文件:

import { createStore } from 'redux'  // 引入createStore方法
const store = createStore()          // 创建数据存储仓库
export default store                 //暴露出去

2- 此时虽然已经建立好了store仓库,但是这个仓库很混乱,这就需要一个有管理能力的模块,就是Reducer。这两个一定要一起创建出来,这样仓库才不会出现互怼现象。在store文件夹下,新建一个文件reducer.js:

const defaultState = {}  //默认数据
export default (state = defaultState,action)=>{  //就是一个方法函数
    return state  // state: 是整个项目中需要管理的数据信息
}

3- 把reducer引入到store中,再创建store时,以参数的形式传递给store

import { createStore } from 'redux'  // 引入createStore方法
import reducer from './reducer' //引入reducer

const store = createStore(reducer)          // 创建数据存储仓库
export default store                 //暴露出去

4- 在store中为TodoList初始化数据,在reducer.js文件的defaultState对象中,加入两个属性:inputValue和list:

const defaultState = {
    inputValue: 'please input name',
    list: [
        'zhangsan',
        'lisa',
        'vivian',
        'petter',
        'lisi',
        'xiaohua'
    ]
}  //默认数据
export default (state = defaultState, action) => {  //就是一个方法函数
    return state  // state: 是整个项目中需要管理的数据信息
}

5- 获取数据,将之前的代码进行优化修改:

import React, { Component } from "react";  //imrc快捷生成
import 'antd/dist/antd.css'
import { Input, Button, List } from 'antd'
import store from './store/index'  //1.引入store

// const data = [
//     'zhangsan',
//     'lisa',
//     'vivian',
//     'petter',
//     'lisi',
//     'xiaohua'
// ]   // 2.数据可删除了,需要从store中获取数据

class TodoList extends Component {   //ccc快捷生成
    constructor(props) {
        super(props);
        console.log(store.getState())  //store 提供 getState() 方法获取 state
        this.state = store.getState() // 3.复制给组件的state
    }
    render() {
        //  4.修改获取数据this.state.XXX
        return (
            <div className="div1">
                <div>
                    Name <Input placeholder={this.state.inputValue} style={{ width:'250px', marginRight:'10px'}}/>
                    <Button type="primary">增加</Button>
                </div>
                <div style={{ margin: '10px', width: '300px' }}>
                    <List
                        bordered  //是否展示边框
                        dataSource={this.state.list}  //列表数据源
                        renderItem={item => (<List.Item>{item}</List.Item>)}  //当使用 dataSource 时,可以用 renderItem 自定义渲染列表项
                    />
                </div>
            </div>
        )
    }
}

export default TodoList;

console.log(store.getState())结果:
在这里插入图片描述
三、效果展示
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值