以下代码导致错误。用参数更新组件状态的正确方法是什么?
constructor(props) {
super(props)
this.state = {
loading: true,
title: 'Meny',
id: null,
data: [],
currentMenuId: null,
error: null,
loadingMessage: 'Laddar innehåll...',
};
this.init();
}
init = () => {
const params = this.props.navigation.state.params
if(typeof(params) !== 'undefined') {
this.setState('title', params.title);
this.setState('id', params.id);
}
console.log(this.state);
}
错误
Invariant Violation: setState(...): takes an object of state variables to update or a function which returns an object of state variables.
This error is located at:
in Menu (at SceneView.js:10)
in SceneView (at StackViewLayout.js:488)
in RCTView (at View.js:60)
in View (at createAnimatedComponent.js:154)
in AnimatedComponent (at StackViewCard.js:12)
in Card (at createPointerEventsContainer.js:28)
in Container (at StackViewLayout.js:539)
in RCTView (at View.js:60)
in View (at StackViewLayout.js:434)
in RCTView (at View.js:60)
in View (at StackViewLayout.js:433)
in StackViewLayout (at withOrientation.js:30)
in withOrientation (at StackView.js:60)
in RCTView (at View.js:60)
in View (at Transitioner.js:169)
in Transitioner (at StackView.js:22)
in StackView (at createNavigator.js:57)
in Navigator (at createKeyboardAwareNavigator.js:11)
in KeyboardAwareNavigator (at createNavigationContainer.js:383)
in NavigationContainer (at SceneView.js:10)
in SceneView (at createTabNavigator.js:10)
in RCTView (at View.js:60)
in View (at ResourceSavingScene.js:14)
in RCTView (at View.js:60)
in View (at ResourceSavingScene.js:10)
in ResourceSavingScene (at createBottomTabNavigator.js:86)
in RCTView (at View.js:60)
in View (at createBottomTabNavigator.js:77)
in RCTView (at View.js:60)
in View (at createBottomTabNavigator.js:76)
in TabNavigationView (at createTabNavigator.js:127)
in NavigationView (at createNavigator.js:57)
in Navigator (at createNavigationContainer.js:383)
in NavigationContainer (at App.js:40)
in App (at registerRootComponent.js:35)
in RootErrorBoundary (at registerRootComponent.js:34)
in ExpoRootComponent (at renderApplication.js:33)
in RCTView (at View.js:60)
in View (at AppContainer.js:102)
in RCTView (at View.js:60)
in View (at AppContainer.js:122)
in AppContainer (at renderApplication.js:32)
Menu.Component.setState
react.development.js:241:102
Menu._this.init
Menu.js:41:8
new
Menu.js:32:7
<unknown>
createClassProxy.js:98:23
instantiate
createClassProxy.js:96:6
new
<unknown file>:0
constructClassInstance
ReactNativeRenderer-dev.js:6569:19
updateClassComponent
ReactNativeRenderer-dev.js:8733:8
beginWork
ReactNativeRenderer-dev.js:9580:15
答案 0 :(得分:1)
嘿,我看到您的setState语法错误。
代替此
this.setState('title', params.title);
this.setState('id', params.id);
使用此
this.setState({
title: params.title,
id: params.id
});
答案 1 :(得分:1)
好!我想到了。无需在这里设置状态,我可以像这样使用getParam():
static navigationOptions = ({ navigation }) => {
return {
title: navigation.getParam('title', ''),
headerStyle: Styles.header,
headerTintColor: Vars.colors.primary,
headerTitleStyle: Styles.headerTitle,
};
};