React Native - 如何将函数传递到导航器中的堆栈屏幕?

Efo*_*osa 5 reactjs react-native

我的导航器在模式内有不同的屏幕。要关闭模态框,需要按下按钮来激活 setState 函数。现在的问题是关闭整个模式的按钮位于堆栈屏幕之一内。请问我如何将该函数作为道具从父级传递到屏幕。下面是我的代码的摘要。谢谢。

//Parent.js

    const [state, setState] = useState(false)
            <Stack.Navigator
                initialRouteName="Screen1"
                screenOptions={{
                    headerShown: false
                }}
             setState={setState}
            >
                <Stack.Screen name="Screen1" component={Screen1} />
                <Stack.Screen name="Screen2" component={Screen2} />
            </Stack.Navigator>
Run Code Online (Sandbox Code Playgroud)

//屏幕1.js

export default Screen1 = ({setState})=>{
  return (
   <View>
      <Button title={Press me} onPress={()=>{
        setState(false)}} />
   </view>
   )
}
Run Code Online (Sandbox Code Playgroud)

Gur*_*ran 5

您可以将其作为初始参数传递,如下所示

  <Stack.Screen
    name="Home"
    component={HomeScreen}
    initialParams={{ setState: setState }}
  />
Run Code Online (Sandbox Code Playgroud)

并像下面这样访问它

function HomeScreen({ navigation, route }) {
  return (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Button
        title="setState"
        onPress={() => route.params.setState(false)}
      />
    </View>
  );
}
Run Code Online (Sandbox Code Playgroud)

但对于复杂的场景,最好考虑基于上下文的实现。

  • 谢谢@GuruparanGiritharan。它似乎有效,但我收到一个黄色标志警告“在导航状态中发现了不可序列化的值......”。有没有更好的方法来处理这个问题,或者我应该忽略这个警告? (3认同)