首页 > 解决方案 > React Native Stack Navigator 传递道具

问题描述

我想将一些道具(值)传递到另一个页面,我正在使用stackNavigator

应用程序.js:

import Insert from "./components/pages/Insert";
import ViewData from "./components/pages/ViewData";

const Stack = createStackNavigator();

NavigationContainer>
        <Stack.Navigator headerMode={false}>
          <Stack.Screen name="Insert Your data" component={Insert} />
          <Stack.Screen name="ViewData" component={ViewData} />
        </Stack.Navigator>
      </NavigationContainer>

插入.js

const Insert = ({ props, navigation: { navigate } }) => {
  const [enteredName, setEnteredName] = useState();
  const [enteredSurname, setEnteredSurname] = useState();

const sendValues = (enteredName, enteredSurname) => {
    setEnteredName(enteredName);
    setEnteredSurname(enteredSurname);
    navigate("ViewData", {
      name: enteredSurname,
      surname: enteredSurname
    });
  };

...

<View>
          <Button
            title="Submit"
            onPress={() => sendValues(enteredName, enteredSurname)}
          />

ViewData.js

const ViewData = ({props, navigation: { goBack } }) => {
  let name = enteredName;

  console.log(name); /// I always get undefined

  return (
    <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
      <Text>Here {name}</Text>
      <Button onPress={() => goBack()} title="Edit Data" />
    </View>
  );
};

当我提交时,我总是在控制台中未定义。我肯定在某个地方弄错了。

任何想法?

谢谢!!

标签: react-navigationreact-navigation-stack

解决方案


参考https://reactnavigation.org/docs/hello-react-navigation/#passing-additional-props

为屏幕使用渲染回调而不是指定组件道具:

<Stack.Screen name="Home">
  {props => <HomeScreen {...props} extraData={someData} />}
</Stack.Screen>

你可以这样改变

import Insert from "./components/pages/Insert";
import ViewData from "./components/pages/ViewData";

const Stack = createStackNavigator();

          <NavigationContainer>
            <Stack.Navigator headerMode={false}>
              <Stack.Screen name="Insert Your data">
                 {props => (<Insert {...props} extraData={data}/>)}
              <Stack.Screen name="ViewData" component={ViewData} />
            </Stack.Navigator>
          </NavigationContainer>

推荐阅读