React Native Stack Navigator передает реквизит - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу передать некоторые реквизиты (значение) на другую страницу, и я использую 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>
  );
};

Когда я отправляю, я всегда получаю неопределенное в консоли. Наверняка я где-то ошибаюсь.

Есть идеи?

Спасибо !!

1 Ответ

1 голос
/ 22 марта 2020

См. https://reactnavigation.org/docs/hello-react-navigation/

Используйте обратный вызов рендеринга для экрана вместо указания пропеллера компонента:

<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>
...