react中使用redux

// 首先引入 redux 以及 react-redux
yarn add redux 
yarn add react-redux


//第二步 在项目的根路径下面创建一个reducer文件夹里面放一个index文件
// 默认值
const defaultvalue = {
    value: {
        name: 'xuhao',
        id: 1
    }
}
// 处理发送过来的 action
export const reducer = (state = defaultvalue, action) => {
    switch(action.type){
        case 'test_Object':
            return Object.assign({}, state, action);
        default: 
            return state
    }
}


//第三步新建一个store文件夹里面放一个index
import { createStore } from 'redux'
import { reducer } from '../reducer'
export const store = createStore(reducer)

// 第四步在所有页面的根组件中使用Provider高阶组件
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
// import App from './App';
import { HashRouter, Route, Switch,Redirect } from 'react-router-dom';
import { minRouter } from './routers';
import Page2 from './pages/page2/page2';
import { Provider } from 'react-redux';
import { store } from './store';
ReactDOM.render(
// 在Provider中传入你的store
  <Provider store={store}>
    <HashRouter>
      <Switch>
        <Route path="/page2" render={(data) => <Page2 {...data}/>}/>
        {minRouter.map(item => {
          return (<Route key={item.path} {...item}/>)
        })}
        <Redirect to="/errpage"/>
      </Switch>
    </HashRouter>
  </Provider>
  ,
  document.getElementById('root')
);

// 在子组件中使用connect(接受的处理函数,发送的处理函数)(组件)
import React, { Component } from 'react';
import { Route, Switch } from 'react-router-dom';
import { sfRouter } from '../../routers';
import Child1 from './child/child1';
import { connect } from 'react-redux'
class Page2 extends Component {
    handleClick = () => {
        console.log(this.props)
        // 这里能调用到mapStatetopProps 中返回的函数
        this.props.sendActions()
    }
    render() {
        return (
            <h1>
                主页面2
                {this.props.value.name}
                <button onClick={this.handleClick}>测试</button>
                <Switch>
                    {sfRouter.map(item => {
                        return <Route key={item.path} path={item.path} exact={item.exact} render={(data) => <item.component {...data}/>}/>
                    })}
                    <Route path="/page2/child1" component={Child1}/>
                </Switch>
            </h1>
        );
    }
}
// 将sendActions挂载到props中方便发送action
const mapStatetopProps = (dispatch) => {
    return {
        sendActions: () => {
            dispatch({
                type: 'test_Object',
                value: {
                    name: 'guan1',
                    id: 1
                }
            })
        }
    }
}
// 将state返回的数据挂载到props中方便页面使用
const accept = (state) => {
    return state
}
export default connect(accept, mapStatetopProps)(Page2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值