简体   繁体   English

react-native设置全局状态并使用redux进行回调

[英]react-native set global state and call back using redux

I am trying to pass state globally using redux. 我正在尝试使用redux全局传递状态。 What I want to do is, in the first screen, I generate a randomNumber and set that to global state . 我想做的是,在第一个屏幕中,我生成一个randomNumber并将其设置为global state

Then, I navigate to the next screen, and when I toggle a button, I call back the global state randomNumber . 然后,我导航到下一个屏幕,当我切换按钮时,我会回调global state randomNumber Below is my code: 下面是我的代码:

App.js App.js

    import { createStore } from 'redux'
    import { Provider } from 'react-redux'
    import { createDrawerNavigator, createStackNavigator, } from 'react-navigation'

    const initialState = {randomNumber:''}
    const reducer = (state = initialState, action) => {
      switch (action.type) {
        case 'UPDATE':
                return { randomNumber: state.randomNumber}
      }
        return state
    }

    const store = createStore(reducer)

    class App extends Component {
      render(){
        return(
          <Provider store={store}>
            <View style={{flex:1,backgroundColor:'transparent'}}>
              <AppDrawerNavigator/>
            </View>
          </Provider>
        )
      }
    } 

FirstScreen.js FirstScreen.js

This is where I generate random number and pass the state globally. 这是我生成随机数并全局传递状态的地方。

import { LoginButton, AccessToken } from 'react-native-fbsdk';
import {connect} from 'react-redux'

class FirstScreen extends Component{

  GenerateRandomNumber = () => {
  var RandomNumber = Math.floor(Math.random() * 100) + 1 ;
  this.setState({ RandomNumber : RandomNumber },
  () => console.log(this.state.RandomNumber))
  }

  render() {
  return(
  <View>
    <Text>{this.state.RandomNumber}</Text>
    <Button title="Generate Random Number" onPress={this.GenerateRandomNumber} />
 </View>

function mapStateToProps(state) {
    return {
        randomNumber: state.randomNumber
    }
}

export default connect(mapStateToProps, null)(FirstScreen)

SecondScreen.js SecondScreen.js

Here when I try to call back the global state randomNumber I get undefined. 在这里,当我尝试回叫全局状态randomNumber我不确定。

import React, { Component } from "react";
import {
    View,
    Text,
    StyleSheet,
    Button
} from "react-native";
import {connect} from 'react-redux'

class SecondScreen extends Component {
    render() {
        return (
        <View>
          <Button
                  title="Get global State"
                  onPress={() => this.props.globalState()}/>
          <Text>{this.props.randomNumber}</Text>
        </View>
        );
    }
}

function mapStateToProps(state) {
    return {
        randomNumber: state.randomNumber
    }
}

function mapDispatchToProps(dispatch) {
    return {
        globalState: () => dispatch({ type: 'UPDATE' }),
    }
}

export default connect(mapStateToProps, null)(SecondScreen)

My question: In the secondScreen I want to call the global state randomNumber however, I am getting undefined. 我的问题:在secondScreen中,我想调用global state randomNumber但是,我变得不确定。

Any Idea what I am doing wrong? 知道我在做什么错吗? I am very new to redux, so any advise or comments would be really appreciated! 我是Redux的新手,因此非常感谢您提供任何建议或意见! Thanks in advance! 提前致谢!

I think in your first screen you have 我认为在您的第一个屏幕中

function mapStateToProps(state) {
    return {
        randomNumber: state.randomNumber
    }
}

but while setting state you are using 但是在设置状态时您正在使用

 this.setState({ RandomNumber : RandomNumber }

i think it should be 我认为应该

this.setState({ randomNumber: RandomNumber }

Also may be you skipped to dispatch action in firstscreen to set the global state. 也可能跳过了在firstscreen中调度动作以设置全局状态。 Using just this.setState you are setting the local state of component. 仅使用this.setState即可设置组件的本地状态。 To set global state , you have to dispatch the action . 要设置全局状态,您必须分派操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM