首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setState in componentDidMount()

setState in componentDidMount()
EN

Stack Overflow用户
提问于 2018-06-21 07:55:34
回答 2查看 209关注 0票数 0

下面的代码会导致错误。用params更新组件状态的正确方法是什么?

代码语言:javascript
复制
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);
    }

错误

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2018-06-21 08:04:15

嘿,正如我所看到的,您的setState语法是错误的。

而不是这个

代码语言:javascript
复制
this.setState('title', params.title);
this.setState('id', params.id);

使用这个

代码语言:javascript
复制
this.setState({
  title: params.title,
  id: params.id
});
票数 1
EN

Stack Overflow用户

发布于 2018-06-21 08:04:16

好的!我想通了。不需要在这里设置状态,只需使用getParam(),如下所示:

代码语言:javascript
复制
   static navigationOptions = ({ navigation }) => {
      return {
         title: navigation.getParam('title', ''),
            headerStyle: Styles.header,
            headerTintColor: Vars.colors.primary,
            headerTitleStyle: Styles.headerTitle,
         };
   };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50963250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档