文章

屏幕聚焦时执行副作用

屏幕聚焦时执行副作用

屏幕聚焦时执行副作用

屏幕聚焦时执行副作用

函数组件中

  • 方式一
1
2
3
4
5
6
7
8
9
10
11
function Profile({ navigation }) {
  React.useEffect(() => {
    const unsubscribe = navigation.addListener('focus', () => {
      // do something
    });

    return unsubscribe;
  }, [navigation]);

  return <ProfileContent />;
}
  • 方式二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { useFocusEffect } from '@react-navigation/native';

function Profile({ userId }) {
  const [user, setUser] = React.useState(null);

  useFocusEffect(
    React.useCallback(() => {
      const unsubscribe = API.subscribe(userId, (user) => setUser(user));

      return () => unsubscribe();
    }, [userId])
  );

  return <ProfileContent user={user} />;
}

类组件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Profile extends React.Component {
  componentDidMount() {
    this._unsubscribe = navigation.addListener('focus', () => {
      // do something
    });
  }

  componentWillUnmount() {
    this._unsubscribe();
  }

  render() {
    // Content of the component
  }
}
本文由作者按照 CC BY 4.0 进行授权