时间:2021-05-18
安装
配置action
actionType
创建文件src/actions/types.js,在types.js文件中添加需要的action类型
export const TEST1_ACTION = 'test1';export const SET_TEST2_ACTION = 'change_test2';export const SET_TEST3_ACTION = 'change_test3';createActions
创建文件src/actions/test.js,在test.js文件中编写action
import {TEST1_ACTION, SET_TEST2_ACTION, SET_TEST3_ACTION} from './types// 获取test1的值export const getTest1Action = () => { return { type:TEST1_ACTION }}// 写入test2的值export const setTest2Action = (testValue) => { return { type:SET_TEST2_ACTION, payload:testValue }}// 写入test3的值export const setTest3Action = (payload) => { return { type:SET_TEST3_ACTION, payload }}配置reducer
因为一个项目中可能会有很多地方需要用到reducer,所以把这些reducer文件分开管理比较好,比如:test.js,settings.js,auth.js等等。
创建文件src/reducers/test.js,编写test reducer
import {TEST1_ACTION, SET_TEST2_ACTION, SET_TEST3_ACTION} from '../actions/types// 初始化const initTest = { test1:'这是test1初始化的值', test2:'这是test2初始化的值', test3:'这是test3初始化的值'}export default (state = initTest, action) =>{ switch (action.type) { case TEST1_ACTION:{ return { ...state } } case SET_TEST2_ACTION:{ return { ...state, test2:action.payload } } case SET_TEST3_ACTION:{ return { ...state, test3:action.payload.testValue } } default: return state }}创建文件src/reducers/index.js
import {combineReducers} from 'redux'import test from './test'const reducers = combineReducers({ test, });export default reducers;配置saga
创建文件src/sagas/test.js
import {all,fork,put,takeEvery} from 'redux-saga/effects'import {setTest2Action, setTest3Action} from "../actions/test"import {SET_TEST2_ACTION, SET_TEST3_ACTION} from "../actions/actionTypes"import axios from 'axios'function* changeTest2 (testValue) { yield put(setTest2Action(testValue))}function* changeTest3 (obj) { try{ // 这里使用axios从网络获取数据演示,没有安装axios的需要先安装它。 // 期间响应状态码判断就省略了,就当它每次请求都成功获得testValue的数据 response = axios.get('http://localhost/api/test') // 假设response.data里面有一个key为testValue的值 yield put(setTest3Action(response.data)) } catch (error) { console.error('这里也可以yield put一个createAction,这里不作演示') }}export function* setTest2 () { yield takeEvery(SET_TEST2_ACTION, changeTest2)}export function* setTest3 () { yield takeEvery(SET_TEST3_ACTION, changeTest3)}export default function* testSaga(){ yield all([ fork(setTest2), fork(setTest3), ])}创建文件src/sagas/index.js
import {all} from 'redux-saga/effects';import testSaga from './test'export default function* rootSaga() { yield all([ testSaga() ]);}配置store
App入口文件路由配置
Test.js
src/Test/index.js
import React from 'react'import {connect} from 'react-redux'import {setTest2Action, setTest3Action} from '../actions/test'class Test extends React.Component { render() { const {test1, test2, test3, setTest2Action, setTest3Action} = this.props return { <div> <div> test1的值为:{test1} </div> <div> test2的值为:{test2} <button onClick={setTest2Action('abc')}>设置test2的值为 abc</button> </div> <div> test3的值为:{test3} <button onClick={setTest3Action()}>从网络获取test3的值</button> </div> </div> } }}const mapStateToProps = ({test}) => { const {test1,test2,test3} = test; return {test1,test2,test3}}export default connect (mapStateToProps,{setTest2Action, setTest3Action})(Test)至此,即可运行 npm start进行测试了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
最近在写RN相关的东西,其中涉及到了redux-saga,saga的实现原理就是ES6中的Generator函数,而Generator函数又和迭代器有着密不可分
前一篇主要记录了一下SSR配置以及结合Redux的使用。这里简单说一下ReactSSR中样式处理和更优雅的SEOSSR样式在React客户端渲染,添加样式很容易
在最近的一个项目中,要求对redux数据做持久化处理,经过研究后成功实现,在此记录一下过程我们可以使用redux-persist对数据做持久化处理安装npmi-
自己动手实现一个react-redux之前试过自己动手实现一个redux,这篇blog主要记录动手实现一个react-redux的过程。这个react-redu
前言在之前写过一篇博客"关系数据库如何快速查询表的记录数",里面介绍了使用sp_spaceused查看表的记录数是否正确的问题,具体如下:关于问题3:有多个索引