react-redux使用

安装

tnpm install -S react-redux
// 引入createStore的作用
tnpm install --s redux

store的创建

目录结构

store的目录结构

index.js

import {createStore} from 'redux'
import reducer from './reducer'

const store = createStore(reducer)

export default store

reducer/index.js

import {CHANGE_DATA, CHANGE_NAME} from '../actions/actionType'

const initialData = {
  user: {
    id: 1,
    name: 'haiyang',
    company: '云知道',
    work: 'php',
    pic: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1600961220628&di=0365e8569849a27c577d77c38090ec18&imgtype=0&src=http%3A%2F%2Fa3.att.hudong.com%2F00%2F38%2F01300000241358127660380294217.jpg'
  },
  data: 'userinfo'
}

export default function (state = initialData, action) {
  console.log(state, action)
  switch (action.type) {
    case 'CHANGE_DATA':
      return {
        ...state,
        data: action.value
      }
      break;
    case 'CHANGE_NAME':
      return {
        ...state,
        user: {
          ...state.user,
          name: action.value
        }
      }
      break;
    default:
    return state
  }
}

actions/index.js

import {CHANGE_NAME, CHANGE_DATA} from './actionType'

export const changeData = (value) => {
  return {
    type: CHANGE_DATA,
    value
  }
}

export const changeName = value => {
  return {
    type: CHANGE_NAME,
    value
  }
}

actions/actionTypes.js

export const CHANGE_DATA = 'CHANGE_DATA'
export const CHANGE_NAME = 'CHANGE_NAME'

store的使用

store要在最顶层使用,这样下面的每个组件才能使用和修改store里面的值

引入store

我是在路由开始引入

import React from 'react'
import {HashRouter, Route, Switch} from 'react-router-dom'
import Home from '@/pages/Home'
// 引入Provider
import {Provider} from 'react-redux'
// 引入store
import store from './store'

function App() {
  return (
    <Provider store={store}>
      <HashRouter>
        <Switch>
          <Route exact component={Home} />
        </Switch>
      </HashRouter>
    </Provider>
  );
}

export default App

此时下面的组件是可以获取到store里面的值了

store值的获取和修改

import React from 'react'
import {connect} from 'react-redux'
import {changeData, changeName} from '@/store/actions'

function Home(props)
{
  // 这里是把store的值,并入到props的里面
  // 如果是class组件,就是this.props
  console.log(props)
  return (
    <div>
      store里的data属性:{props.data.data}
      <br />
      store里的用户的名字:{props.data.user.name}
      <br />
      <button onClick={props.changeNowData}>
        改变data的值
      </button>
      <button onClick={props.changeNowName}>
        改变user-name的值
      </button>
    </div>
  )
}

const stateToProps = state => {
  // store里的值, 这里是读取store的值给当前组件的props里
  // console.log(state)
  return {
    data: state
  }
}

// 改变store的数据
const dispatchToProps = dispatch => {
  // changeNowData、changeNowName会加在当前的props里,然后diapatch去改变store的数据
  return {
    changeNowData(e) {
      dispatch(changeData('改变data的数据'))
    },
    changeNowName(e) {
      dispatch(changeName('改变user-name的数据'))
    }
  }
}

export default connect(stateToProps, dispatchToProps)(Home)

打印结果

初始化的props和store

初始化的props

store初始化未有修改时

一个改变store值流程
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容