美文网首页
08.Redux进阶(下)

08.Redux进阶(下)

作者: 小二的学习日记 | 来源:发表于2020-07-16 22:35 被阅读0次

如何使用React-redux

这里我们新建一个项目
create-react-app reactreduxdemo
在项目引入redux模块
cnpm install --save redux
编写一个基本的使用了上一章我们学过的redux的TodoList

image.png
1.引入TodoList布局
//===>src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import TodoList from './TodoList';

const App = (
    <TodoList />
);

ReactDOM.render(
  App,
  document.getElementById('root')
);

2.编写TodoList.js

//===>src/TodoList.js
import React, { Component } from "react";
import store from './store'
class TodoList extends Component {
    
    constructor(props) {
        super(props);
        this.state = store.getState()
    }

    render() {
        return (
            <div>
                <div>
                    <input value={this.state.inputValue} />
                    <button>提交</button>
                </div>
                <ul>
                    <li>Dell</li>
                </ul>
            </div>
        )
    }
}
export default TodoList;

3.编写store

//===>src/store/index.js
import { createStore } from 'redux'
import reducer from './reducer'

const store = createStore(reducer)
export default store

4.store用到的reducer

//===>src/store/reducer.js
const defaultState = {
    inputValue: 'hello world',
    list: []
}

export default (state = defaultState, action) => {
    return state
}

我们可以用npm run start命令来看下效果


效果

接下来我们要用react-redux进行改造了

使用React-redux完成TodoList功能

导入react-redux模块
npm install react-redux

Provider这个组件是react-redux提供的组件,他可以把store,通过store={store}这样把store对象向下传递进他的所有子组件中。这个demo中,TodoList组件就拥有了全局的store。

//===>src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import TodoList from './TodoList';
import { Provider } from 'react-redux';
import store from './store';

const App = (
  <Provider store={store}>
    <TodoList />
  </Provider>
);

ReactDOM.render(
  App,
  document.getElementById('root')
);

2.完善一下reducer
这个和之前一样,不过多解释了。

//===>src/store/reducer.js
const defaultState = {
    inputValue: 'hello world',
    list: []
}

export default (state = defaultState, action) => {
    if (action.type === 'change_input_value') {
        const newState = JSON.parse(JSON.stringify(state))
        newState.inputValue = action.value
        return newState
    }

    if (action.type === 'add_item') {
        const newState = JSON.parse(JSON.stringify(state))
        newState.list.push(newState.inputValue)
        newState.inputValue = ''
        return newState
    }
    return state
}

3.修改TodoList
这里,因为他是个纯UI组件,所以我们用函数的声明方法,提高效率。
const { inputValue, list, changeInputValue, handleClick } = props
这句话,解构赋值。为什么能从props里结构出这些东西呢?我们看最后一行connect方法把TodoList和store连在了一起。connect方法还要传入mapStateToProps和mapDispatchToProps,这两个函数的作用是,把store的state和dispatch映射到props,这就回答了我们一开始的问题。

//===>src/TodoList.js
import React, { Component } from "react";
import { connect } from 'react-redux'

const TodoList = (props) => {

    const { inputValue, list, changeInputValue, handleClick } = props

    return (
        <div>
            <div>
                <input value={inputValue} onChange={changeInputValue} />
                <button onClick={handleClick}>提交</button>
            </div>
            <ul>
                {
                    list.map((item, index) => {
                        return <li key={index}>{item}</li>
                    })
                }
            </ul>
        </div>
    )
}

const mapStateToProps = (state) => {
    return {
        inputValue: state.inputValue,
        list: state.list
    }
}

const mapDispatchToProps = (dispatch) => {
    return {
        changeInputValue(e) {
            const action = {
                type: 'change_input_value',
                value: e.target.value
            }
            dispatch(action)
        },
        handleClick(e) {
            const action = {
                type: 'add_item'
            }
            dispatch(action)
        },
        handleDelete(e) {
            console.log(e);

            const action = {
                type: 'delete_item',
            }
        }
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(TodoList);
image.png

相关文章

  • 08.Redux进阶(下)

    如何使用React-redux 这里我们新建一个项目create-react-app reactreduxdemo...

  • Python 进阶(下)

    1、如何调整字符串中文本的格式? 2、如何将多个小字符串拼接成一个大字符串? 3、如何对字符串进行左、右、居中对齐...

  • 一位PPT设计师的思维进阶指南

    说到“进阶指南”那到底什么是进阶指南呢? 我想用中国道家的一种思想模型来构建一下今天说的PPT思维进阶指南。 首先...

  • 程序员教你做蚂蚁森林的水滴特效,网友:我们也是支付宝有树的人

    本专栏专注分享Android进阶内容,后续会持续更新,喜欢的话麻烦点击关注一下 Android进阶之路 前言: 作...

  • Android进阶指导

    关于进阶的思考 已下是收集的关于进阶<初级----中级>的文章 中级需要掌握的能力 AIDL:熟悉AIDL,理解其...

  • 《Java 进阶之路》 下

    真正想提升自己,我感觉最主要的是先把 JVM、并发、网络这三块知识点学会、学通,这三块是基础,后面所有的框架、中间...

  • 股市进阶之道(下)

    ‘市场在70%的时间里是不具有重大的操作意义的,25%的时间里可能出现有意义的操作机会,而只有5%的时间是具有重大...

  • 爱上跑步 享受幸福人生(三)进阶

    爱上跑步 享受幸福人生(三)进阶 插播前传“走路”之后,终于回到了跑步的话题,我们讨论下进阶阶段。对于刚开始...

  • 深入理解JVM的内存区域划分

    作者Java后端进阶 转载请注明出处公众号「Java后端进阶」 一、首先我们先熟悉一下JVM 1. 什么是JVM?...

  • 复盘6月股票初级课跟班收获

    周五初级营结营,恰好接着跟的进阶营开营了。分析一下这次跟班的所学吧!前面跟了三次股票进阶班,感觉到进阶的问题有的与...

网友评论

      本文标题:08.Redux进阶(下)

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