gpt4 book ai didi

javascript - 使用 redux 进行 react native 设置状态

转载 作者:行者123 更新时间:2023-12-03 00:55:44 26 4
gpt4 key购买 nike

我正在尝试使用 redux 设置状态。我正在使用 facebook 登录,一旦我得到 facebookAccessToken我想使用 redux 将其设置为全局状态,并使用按钮回调全局状态。下面是我的代码:

App.js

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

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

const store = createStore(reducer)

class App extends Component {
render(){
return(

<Provider store={store}>
<View style={{flex:1,backgroundColor:'transparent'}}>
<AppDrawerNavigator/>
</View>
</Provider>
)
}
}

登录屏幕.js

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

class LoginScreen extends Component{
render() {
return(

<View>
<LoginButton
onLoginFinished={
(error, result) => {
if (error) {
console.log("login has error: " + result.error);
} else if (result.isCancelled) {
console.log("login is cancelled.");
} else {
this.props.navigation.navigate('VerifyScreen')
AccessToken.getCurrentAccessToken().then(
(data) => {
this.setState({facebookToken:data.accessToken},
() => console.log('facebookToken.state',this.state.facebookToken),
//Here I am getting undefined for 'this.props.facebookToken'
() => console.log('facebookToken.props',this.props.facebookToken),
console.log('facebook login success!'),
console.log('facebook token is:',data.accessToken.toString()))
}
)
}
}
}
onLogoutFinished={() => console.log("logout.")}/>

//I created a button to see if I could call global state. but this would give me an error "state is not defined"
<Button
title="call global state"
onPress={() => this.props.updateState()}/>


</View>
)
}
}

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

function mapDispatchToProps(dispatch) {
return {
updateState: () => dispatch({ type: 'UPDATE',payload: state.facebookToken }),
}
}

export default connect(mapStateToProps, mapDispatchToProps)(LoginScreen)

我的问题:1)在我的LoginScreen为什么我得到undefined对于“this.props.facebookToken”是因为我没有调用函数“updateState”?

2) 在我的“LoginScreen”中,一旦我成功使用 facebook 登录,我就会得到 AccessToken并假设this.props.facebookToken设置为data.accessToken 。所以当我按下按钮时,我期望得到 globalState但它给了我一个错误 state未定义。

我对 redux 很陌生,所以任何评论或建议都会非常有帮助。提前致谢!

最佳答案

对于您的第一个问题,您是正确的,因为您没有调用 updateState 方法。

对于你的第二个问题,试试这个。该代码块中从未定义状态,因为您没有传递状态对象。

function mapDispatchToProps(dispatch) {
return {
updateState: () => dispatch({ type: 'UPDATE', payload: state.facebookToken }),
}
}

将其更改为

function mapDispatchToProps(dispatch) {
return {
updateState: (state) => dispatch({ type: 'UPDATE', payload: state.facebookToken }),
}
}

然后更改

onPress={() => this.props.updateState()}

onPress={() => this.props.updateState(this.state)}

关于javascript - 使用 redux 进行 react native 设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52847289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com