Как передать заголовок компонента кнопки в функцию в React Native

#javascript #react-native

#javascript #react-native

Вопрос:

Я хочу передать заголовок компонента кнопки React Native в соседнюю функцию. Я использую функциональные компоненты React Native только для этого приложения.

Вот компонент. Я хотел бы передать заголовок кнопки, нажатой пользователем, который будет либо «английский», либо «арабский», в функцию submitLanguageSelection , чтобы затем я мог сохранить это значение в useLocalStorage() , пользовательский хук, который я написал для обработки AsyncStorage , так что в следующий раз, когда пользователь использует приложение, их выбор языка будет сохранен, и они не будут отображаться ChooseYourLanguageScreen снова.

Любая помощь приветствуется, спасибо.

 const ChooseYourLanguageScreen = ({ navigation }) => {
  const [saveData, storedValue, errorMessage] = useLocalStorage();
  const [userSelectedLanguage, setUserSelectedLanguage] = React.useState('');

  const submitLanguageSelection = () => {
    //TODO: receive params from onPress
    //TODO: save the data locally
    //TODO: navigate to welcome screen
  };

  return (
    <View style={styles.container}>
      {errorMessage ? <Text>{errorMessage}</Text> : null}
      <Text style={styles.text}>This is the Choose Your Language Screen</Text>
      <View style={styles.buttons}>
        <View>
          <Button
            title={'English'}
            onPress={() => submitLanguageSelection()}
          />
        </View>
        <View>
          <Button title={'Arabic'} onPress={() => submitLanguageSelection()} />
        </View>
      </View>
    </View>
  );
};
  

Ответ №1:

Вы можете просто передать его в функцию

  <Button title={'Arabic'} onPress={() => submitLanguageSelection('Arabic')} />
  

И получить доступ, как показано ниже

   const submitLanguageSelection = (language) => {
    console.log(language);
  };
  

Ответ №2:

Получение данных из родственного компонента является антишаблоном.

Источником знаний о языковых параметрах является ChooseYourLanguageScreen компонент (как видно из вашего фрагмента), поэтому он должен содержать список доступных языков. Имея это, вы можете просто перебирать их и отображать соответствующие компоненты:

 <View style={styles.buttons}>
  {languages.map((language) => (
    <View key={language}>
      <Button
        title={language}
        onPress={() => submitLanguageSelection(language)}
      />
    </View>
  ))}
</View>