美文网首页
react简单使用react-redux步骤

react简单使用react-redux步骤

作者: 一个打工人 | 来源:发表于2021-04-15 15:39 被阅读0次

1、引入react-redux,redux,  redux-thunk,  redux-persist

        npm install react-redux redux redux-thunk redux-persist,

        其中redux-thunk是一个中间件说的是可以提供异步派遣action,redux-persist数据持久化存储

2、项目入口文件index.js

// Provider是react-redux两个核心工具之一,作用:将store传递到每个项目中的组件中

// 第二个工具是connect,稍后会作介绍

import { Provider } from 'react-redux'

// 引入创建好的store实例

import store, { persistor } from './store/index';

import { PersistGate } from 'redux-persist/integration/react';

ReactDOM.render(

  <React.StrictMode>

    <Provider store = {store}>

    <PersistGate loading={null} persistor={persistor}>

    <App />

    </PersistGate>

    </Provider>

  </React.StrictMode>,

  document.getElementById('root')

);

3、src目录下创建store文件夹

   3.1 store/index.js 文件

// applyMiddleware: redux通过该函数来使用中间件

// createStore: 用于创建store实例

import { applyMiddleware, createStore } from "redux";

// 中间件,作用:如果不使用该中间件,当我们dispatch一个action时,需要给dispatch函数传入action对象;但如果我们使用了这个中间件,那么就可以传入一个函数,这个函数接收两个参数:dispatch和getState。这个dispatch可以在将来的异步请求完成后使用,对于异步action很有用

import thunk from 'redux-thunk'

// 引入reducer

import reducers from './reducers.js'

import { persistStore, persistReducer } from 'redux-persist' // 用来避免刷新导致store重置

import storage from 'redux-persist/lib/storage'; //将redux保存到localstorage中

// import storage from 'redux-persist/lib/storage/session'; //将redux保存到sessionstorage中

const myReducer = persistReducer({

  key: 'root',

  storage

}, reducers)

const store = createStore(

  myReducer,

  applyMiddleware(thunk)

)

export const persistor = persistStore(store);

export default store    

3.2 store/action.js 文件

export function setUserInfo (data) {

  return (dispatch, getState) => {

    dispatch({ type: 'SET_USER_INFO', userInfo: data })

  }

}

3.3 store/state.js 文件

export default {

  userInfo: {}

}

3.4 store/reducers.js文件

// 工具函数,用于组织多个reducer,并返回reducer集合

import { combineReducers } from "redux";

// 默认值

import defaultState from "./state";

// 一个reducer就是一个函数

console.log(defaultState.userInfo, '**************')

function userInfoReducers(state = defaultState.userInfo, action) {

  // 不同的action有不同的处理逻辑

  switch (action.type) {

    case 'SET_USER_INFO':

      return action.userInfo

    default:

      return state

  }

}

// 导出所有reducer

export default combineReducers({

  userInfo: userInfoReducers

})

4、src下创建views文件夹用来存放组件

4.1 views文件下创建userInfo.jsx文件

import React from 'react'

import { connect } from "react-redux"

import { setUserInfo } from "../store/actions";

function UserInfo({userInfo, setUserInfo}) {

  const changeUserInfo = () => {

    setUserInfo({name: '1', age: 20, sex: '女'})

  }

  return <div>

    我是一个用户信息组件

    <h1>用户名称:{userInfo.name}</h1>

    <h2>性别:{userInfo.sex}</h2>

    <h2>年龄:{userInfo.age}</h2>

    <button onClick={changeUserInfo}>修改信息</button>

  </div>

}

// mapStateToProps:将state映射到组件的props中

const mapStateToProps = (state) => {

  console.log(state, '当前的state是什么')

  return {

    userInfo: state.userInfo

  }

}

// mapDispatchToProps:将dispatch映射到组件的props中

const mapDispatchToProps = (dispatch) => {

  return {

    setUserInfo (data) {

      dispatch(setUserInfo(data))

    }

  }

}

export default connect(mapStateToProps, mapDispatchToProps)(UserInfo);

4.2 在app.js文件中引入userInfo组件

import './App.css';

import UserInfo from "./views/userInfo.jsx";

function App() {

  return (

    <div className="App">

      <UserInfo></UserInfo>

    </div>

  );

}

export default App;

具体使用看views/userInfo.jsx中的调用,以上为react-redux简单使用,整理一下。

相关文章

网友评论

      本文标题:react简单使用react-redux步骤

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