Показать обновленную переменную на другом экране React Native

#javascript #reactjs #react-native #variables

Вопрос:

У меня есть моя ScreenOne.js файл, в котором у меня есть переменная под названием points с начальным значением 0. У меня также есть некоторые функции в файле, которые добавляют значение 10 к точкам.

Обновленная переменная points отображается на экране, и она хорошо обновляется. Я также хочу отобразить обновленную переменную точек на экране под названием ScreenTwo.js но это, похоже, проблема.

Я уже пытался сохранить обновленное значение в локальном хранилище, но оно возвращает значение null. В этом случае я пытаюсь экспортировать обновленную переменную, но она возвращает переменную, имеющую начальное значение вместо обновленного значения.

Каков может быть наилучший способ передачи и отображения обновленной переменной в ScreenTwo?

Экранный экран:

 const ScreenOne = ({ navigation }) => {
    let valuePoints = 0
    module.exports.valuePoints = valuePoints;

    if (userInput1.search('No') < 0) {
        console.log('Wrong answer!')
    } else {
        valuePoints  = 10
    }

    if (userInput2.search('Yes') < 0) {
        console.log('Wrong answer!')
    } else {
        valuePoints  = 10
    }

    return (
        <ScreenContainer>
            <ScrollView style={{ flex: 1, width: '100%' }}>
                <PointsAmount>
                    {valuePoints}  //Here it displays 20
                </PointsAmount>
            </ScrollView>
        </ScreenContainer>
    )
}

export default ScreenOne;
 

Экран два:

 const ScreenTwo = ({ }) => {
    const {valuePoints} = require('../screens/ScreenOne');

    return (
        <PointsContainer>
            <ScrollView style={{flex:1, width: '100%'}}>
            <TouchableOpacity onPress={() => navigation.navigate('MyTabs1')} >
                <ScoreCard header='Points gained' points={valuePoints} goal={100} /> //Here it should display 20 but instead it displays 0
            </TouchableOpacity>
            </ScrollView>
        </PointsContainer>
    )
}

export default ScreenTwo;
 

Ответ №1:

Вам следует ознакомиться с документами для контекста в react.

Вам нужно создать контекст, который будет обертывать ваш App .

 const [points, setPoints] = useState(0);

<Context.Provider value={{points, setPoints}}>
  Your app
</Context.Provider>
 

Затем в вашем ScreenOne и ScreenTwo вы можете получить и установить значение с помощью:

   const {
    points, setPoints
  } = useContext(Context);