1、首先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>
)
}
还没有评论,来说两句吧...