Redux(3) -在React中使用

react对redux进行了简单封装 react-redux
当我们要用react-redux时、我们可以安装

npm i react-redux

里面提供了Provider
同时也要安装redux
我们可以引入import {Provider} from "react-redux"

ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById('root'));

或者在app.js使用

在组件中使用时、可以通过react-redux中的connect进行关联redux中的数据

这里先写一个connect.js(先看看、在下面案例中会使用)

import { connect } from 'react-redux'

const mapState = (state) => {         //用来得到redux中的数据 
  return {
    count: state.count      
  }
}

const mapDispatch = (dispatch) => {   //这里的mapDispatch可以自己起名
  return {
    'incre': (data) => {         //这里可以理解为、组件使用connect后、先进来这里的函数再派发给reducer
     dispatch({type:’increment‘}))
    },
   'decre': () => {
      dispatch({type:'decrement'})
    }
  }
}
export default connect(mapState, mapDispatch); //这里是暴露给组件使用方法

接下来在一个计数器的案例演示redux使用
在store.js中

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

const store = createStore(reducer)


export default store;

在reducer.js中

const countState = {
  count: 1
}


const reducer = (state = countState, action) => {

  switch (action.type) {     //这里type必须与派发的type名字相同
    case 'increment':
      return {
        count: state.count + 1
      }
      break;
    case 'decrement':
      return {
        count: state.count - 1
      }
      break;
    default:
      return state;
  }
}

export default reducer;

在Button组件中

import React, { Component } from 'react'
import connect from './connect';

class Button extends Component {

  handleClick = () => {
    console.log(this.props.type)
    if (this.props.type === "increment") {
      this.props.incre();     //判断传来的type调用connect中的对应方法
 
    } else {
      this.props.decre();
    }
  }

  render() {
    return (
      <button onClick={this.handleClick}>{this.props.children}</button>
    )
  }

  componentDidMount() {
    console.log('button', this.props)
  }
}

export default connect(Button);

Count组件中

import React, { Component } from 'react'
import Button from "./Button"
import connect from "./connect"

class Count extends Component {
    render() {
        return (
            <div>
                <Button type="decrement">-</Button>   //通过type传到Button组件
                    {this.props.count}
                <Button type="increment">+</Button>
            </div>
        )
    }

    componentDidMount(){
        console.log(this.props)
    }
}

export default connect(Count)

在这里总结下上面计数器的流程

  1. 创建store
  2. 创建reducer.js来更新数据
  3. 通过connect把组件和redux创建联系
  4. 通过点击Count中的按钮、传给Button组件type、再根据type执行对应的connect方法
  5. 在connect方法中、执行对应的reducer方法、修改对应的数据
  6. 想要使用redux中数据、通过connect中的mapState获取数据

至此完成一个简单的计数器使用redux案例
在redux中还会有异步数据、将在接下来博客中讲到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
react-native-redux-router是一个用于在React Native应用管理路由和状态的库。它结合了React Native、ReduxReact Navigation,提供了一种方便的方式来处理应用程序的导航和状态管理。 下面是一个简单的示例,演示了如何在React Native应用使用react-native-redux-router: 1. 首先,安装所需的依赖项。在终端运行以下命令: ```shell npm install react-native react-redux redux react-navigation react-native-router-flux --save ``` 2. 创建一个Redux store,并将其与React Native应用程序的根组件连接起来。在App.js文件,添加以下代码: ```javascript import React from 'react'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; import rootReducer from './reducers'; import AppNavigator from './navigation/AppNavigator'; const store = createStore(rootReducer); export default function App() { return ( <Provider store={store}> <AppNavigator /> </Provider> ); } ``` 3. 创建一个导航器组件,并定义应用程序的导航结构。在navigation/AppNavigator.js文件,添加以下代码: ```javascript import { createAppContainer } from 'react-navigation'; import { createStackNavigator } from 'react-navigation-stack'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { Actions } from 'react-native-router-flux'; import HomeScreen from '../screens/HomeScreen'; import DetailsScreen from '../screens/DetailsScreen'; const MainNavigator = createStackNavigator({ Home: { screen: HomeScreen }, Details: { screen: DetailsScreen }, }); const AppNavigator = createAppContainer(MainNavigator); const mapStateToProps = state => ({ // 将Redux状态映射到导航器组件的props }); const mapDispatchToProps = dispatch => bindActionCreators(Actions, dispatch); export default connect(mapStateToProps, mapDispatchToProps)(AppNavigator); ``` 4. 创建屏幕组件,并在其使用导航和Redux状态。在screens/HomeScreen.js文件,添加以下代码: ```javascript import React from 'react'; import { View, Text, Button } from 'react-native'; import { Actions } from 'react-native-router-flux'; const HomeScreen = () => { return ( <View> <Text>Welcome to the Home Screen!</Text> <Button title="Go to Details" onPress={() => Actions.details()} /> </View> ); } export default HomeScreen; ``` 5. 创建其他屏幕组件,并在其使用导航和Redux状态。在screens/DetailsScreen.js文件,添加以下代码: ```javascript import React from 'react'; import { View, Text, Button } from 'react-native'; import { Actions } from 'react-native-router-flux'; const DetailsScreen = () => { return ( <View> <Text>Welcome to the Details Screen!</Text> <Button title="Go back" onPress={() => Actions.pop()} /> </View> ); } export default DetailsScreen; ``` 这是一个简单的示例,演示了如何在React Native应用使用react-native-redux-router来管理路由和状态。你可以根据自己的需求进行扩展和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值