• react之路:redux的使用


    github仓库地址:https://github.com/wanghao12345/react-book

    简介

    redux主要是用来记录数据状态,然后共享数据。每个react组件都可以获取该数据库中的数据,也可以改变该数据库中的数据。

    引入redux

    项目目录下的控制台输入:

    yarn add redux 或 npm install --save redux

    yarn add react-redux 或 npm install --save react-redux

    创建store

    一般在项目文件夹下创建一个store文件夹,里面创建index.js和reducer.js两个文件

    index.js:创建store仓库

    1 import { createStore } from 'redux'
    2 import reducer from './reducer'
    3 
    4 const store = createStore(reducer)
    5 
    6 export default store

    reducer.js:存放store需要的数据

    1 const defaultState = {
    2     focused: false
    3 }
    4 
    5 export default (state = defaultState, action) => {
    6     return state
    7 }

    使用store

    1.app.js中引入Provider以及store,用Provider将整个组件包裹起来,然后将store当作属性传递给Provider,主要的功能是将store提供给整个组件使用

     1 import { Provider } from 'react-redux'
     2 import store from './store'
     3 
     4 class App extends React.Component {
     5     render() {
     6         return (
     7             <Provider store={store}>
     8                 .......
     9             </Provider>
    10         )
    11     }
    12 }
    13 
    14 export default App;    

     2.在需要使用store的组件中,先引入connect, 然后创建mapStateToProps和mapDispatchToProps,最后在connect(mapStateToProps, mapDispatchToProps)(组件名)

     1 import React from 'react'
     2 import { connect } from 'react-redux'
     3 
     4 class Header extend  React.Component {
     5 
     6     render () {
     7         return (
     8            <div>
     9                <input />
    10            </div>
    11         )
    12     }  
    13 
    14 }
    15 
    16 /**
    17  * 将仓库的state映射到props(获取state)
    18  * @param state
    19  */
    20 const mapStateToProps = (state) => {
    21     return {
    22 
    23     }
    24 }
    25 
    26 /**
    27  *  将dispatch映射到props(改变state)
    28  * @param dispatch
    29  */
    30 const mapDispatchToProps = (dispatch) => {
    31     return {
    32 
    33     }
    34 }
    35 
    36 export default connect(mapStateToProps, mapDispatchToProps)(Header) 

    3.组件获取store中的数据,以及组件使用action发起改变store数据请求

     1 import React from 'react'
     2 import { connect } from 'react-redux'
     3 
     4 class Header extend  React.Component {
     5 
     6     render () {
     7         return (
     8            <div>
     9                <input 
    10                    value={this.props.focused}
    11                    onFocus={props.handleInputFocus}
    12                    onBlur={props.handleInputBlur}
    13                 />
    14            </div>
    15         )
    16     }  
    17 
    18 }
    19 
    20 /**
    21  * 将仓库的state映射到props(获取state)
    22  * @param state
    23  */
    24 const mapStateToProps = (state) => {
    25     return {
    26         focused: state.focused
    27     }
    28 }
    29 
    30 /**
    31  *  将dispatch映射到props(改变state)
    32  * @param dispatch
    33  */
    34 const mapDispatchToProps = (dispatch) => {
    35     return {
    36         // 聚焦
    37         handleInputFocus () {
    38             const action = {
    39                 type: 'search_focus'
    40             }
    41             dispatch(action)
    42         },
    43         // 离焦
    44         handleInputBlur () {
    45             const action = {
    46                 type: 'search_blur'
    47             }
    48             dispatch(action)
    49         }
    50     }
    51 }
    52 
    53 export default connect(mapStateToProps, mapDispatchToProps)(Header) 

    同时,reducer.js需要接收改变store的action请求,并改变store

     1 const defaultState = {
     2     focused: false
     3 }
     4 
     5 export default (state = defaultState, action) => {
     6 
     7     if (action.type === 'search_focus') {
     8         return {
     9             focused: true
    10         }
    11     }
    12 
    13     if (action.type === 'search_blur') {
    14         return {
    15             focused: false
    16         }
    17     }
    18     
    19     return state
    20 }

    总结

    store的理解:把整个过程理解成对一个图书馆的书籍管理,store相当于一个图书馆,然后reducer里面的数据相当于是图书馆的书籍。

    首先需要通过createStore创建一个图书馆,创建图书馆的时候,图书馆的书籍不可能为空,所以创建的时候需要把初始的书籍传入进去,即reducer。

    然后需要将该图书馆给所有的人使用,所以需要在app.js通过Provider提供给大家

    当某个人需要使用图书馆里面的书的时候,需要使用connect连接起来,并且需要创建使用书籍的方式。

  • 相关阅读:
    将光标定位于输入框最右侧的实现方式
    Canvas学习笔记
    CSS3 颜色模式
    CSS ^ $选择器
    jQuery.Validator Sample
    让网页的title动起来
    转:线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
    winform 表单正则表达式验证 示例(ValidationRule)
    详解用Navicat工具将Excel中的数据导入Mysql中
    PHP面试题之实现输出100以内的质数
  • 原文地址:https://www.cnblogs.com/wanghao123/p/11152634.html
Copyright © 2020-2023  润新知