打开react-native屏幕时调用函数

时间:2017-06-28 15:41:46

标签: function react-native react-navigation

每次用户打开我的反应原生屏幕时,我都会尝试从AsyncStorage加载JSON(我正在使用StackNavigator)。此JSON包含有关我的状态应设置为什么的信息。

如何调用每次打开此屏幕时运行的功能?

更多信息: 我编写了一个函数,根据从AsyncStorage加载的JSON更新我的状态。从按钮调用时该功能完美无缺,但是当从render()调用该功能时,我的部分屏幕会冻结而某些按钮不再可触摸。奇怪的是,只有TextInput仍然有效。

4 个答案:

答案 0 :(得分:5)

使用componentWillMount()方法。这将在render()方法被触发之前自动执行。

class Sample extends Component{
    state = {data : []};
    componentWillMount(){
        this.setState({data : inputObject});
    }
    render(){
        return(
            <View>
            //you can render the data here
            </View>
        );
    }
}

参考:https://facebook.github.io/react/docs/react-component.html#componentwillmount

答案 1 :(得分:1)

如果要处理后退按钮页面导航,则需要收听 组件安装后,一旦发生导航事件,请使用下面的代码。

componentDidMount = () => {
    this.focusListener = this.props.navigation.addListener('focus',
       () => { 
               console.log('focus is called'); 
              //your logic here.
       }
     );
}

答案 2 :(得分:0)

可以使用react本机文档here

中的'withNavigationFocus'轻松完成此操作
import React, { Component } from 'react';
import { View } from 'react-native';
import { withNavigationFocus } from 'react-navigation';

class TabScreen extends Component {
  componentDidUpdate(prevProps) {
    if (prevProps.isFocused !== this.props.isFocused) {
      // Use the `this.props.isFocused` boolean
      // Call any action
    }
  }

  render() {
    return <View />;
  }
}

// withNavigationFocus returns a component that wraps TabScreen and passes
// in the navigation prop
export default withNavigationFocus(TabScreen);

答案 3 :(得分:0)

您可以使用 hook 方法:

import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  // Similar to componentDidMount and componentDidUpdate:
  useEffect(() => {
    // Update the document title using the browser API
    document.title = `You clicked ${count} times`;
  });

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

我实际上只是复制了文档的第一个示例,但这是一个非常好的示例。 如果您想继续阅读:https://reactjs.org/docs/hooks-effect.html