react-redux不完全指北

1、首先react-redux是用来在组件之间方便传输数据以及改变数据的工具

2、常用的react-redux的方法是包含注入已经调用

3、首先在最外层包含注入

import { Provider } from 'react-redux'  // 全局包含
ReactDOM.render(<Provider><Main /></Provider>, document.getElementById("main"))

4、创建store(类似于全局变量)

(1)基本架构

import { createStore, combineReducers } from "redux"

// 注入数据与方法
import todos from "./store/todos"
import test from "./store/test"

// 创建Store与注入
export default createStore(combineReducers({ todos, test }))

(2)数据于方法

// 初始化数据
let initialState: any = 1

// 返回数据,或者根据返回action变化返回内容
export default function (state = initialState, action: any) {
    switch (action.type) {
        case 'test':
            console.log(1)
            state = state + 1
        default:
            return state
    }
}

4、然后在最外层就可以直接加上store

import myStore from './redux'
ReactDOM.render(<Provider store={myStore}><Main /></Provider>, document.getElementById("main"))

5、接着就是每个需要用到store的页面都要加上connect(需要用到redux创建的全局变量的)

import { connect } from "react-redux"
// 第一个参数是包含全局参数的函数
// 第二个参数是需要导入对象的函数
// 这两个参数到最后都会倒回对象当中
class Test extends React.Component {
  constructor(props) {
    super(props);
  }
 // 自己导入的 this.props.addTodo
 // 自己导入的 this.props.state
 render() {
    return (
      <div>1</div>
    );
  }
}
export default connect(
    (state: any) => state,
    { addTodo }
)(Main);

6、执行方法需要注意的,需要根据你自己给到内容判断执行那个方法

// 例如现在就是以type来判断执行什么方法
export const addTodo = () => ({
    type: 'test',
})

7、刚刚讲的就是简单的react-redux的使用方法,当使用react-hook+react-redux,那么使用起来就会更加的简单(用到react-hook的createContext)  

import { createContext } from 'react'
import { createStoreHook, createDispatchHook, createSelectorHook } from 'react-redux'
// 整体核心
export const MyContext = createContext(null)    // 创建context
export const useStore = createStoreHook(MyContext)    // 创建独有的useStore(获取全局变量用的)
export const useDispatch = createDispatchHook(MyContext)    // 创建独有的dispatch(执行方法用的)
export const useSelector = createSelectorHook(MyContext)    // 创建独有的selector(查找变量用的)

8、注入方式也有所不同

import { MyContext } from '../utils/redux-hook'
// 新增一个注入MyContext
ReactDOM.render(<Provider context={MyContext} store={myStore}><Main /></Provider>, document.getElementById("main"))

9、使用起来更加方便

// 使用方法
const Test = (props: any) => {
    const dispatch = useDispatch()
    return (
        <button onClick={() => dispatch({ type: 'test' })}>点击</button>
    )
}
// 查找元素
const Test = () => {
    const store = useStore()
    // 获取全局
    console.log(store.getState())

    // 获取个别
    const counter = useSelector((state: any) => state.test)
    return (
        <div>{counter}</div>
    )
}

  

 

posted @ 2020-09-15 18:15  kimingw  阅读(286)  评论(0编辑  收藏  举报