На моем домашнем экране есть кнопки, которые ведут на разные экраны, где проводится тест. Когда пользователь завершает тест, счет вставляется в файл базы данных SQLite. Когда пользователь нажимает «Домой», чтобы вернуться на главный экран, я хочу отобразить новый результат в разделе результатов. Примерно так:
Главный экран (App.js):
import Test1 from './Tests/Test1";
class HomeScreen extends React.Component {
constructor(props) {
super(props);
this.state = {
test1Score: 0,
}
//Retrieve last test score from SQLite table
//setState for test1Score
getTestScoreFromSQLiteDBAndSetState();
}
render() {
return(
<Button onPress={this.gotoTest1()} />
<Text>Last test result: {this.state.test1Score}</Text>
)}
}
Test1.js:
onTestComlete() {
//insert the test score to the SQLite table
insertTestScoreToSQLiteDB();
}
<Button onPress={navigation.navigate('HomeScreen')} title='Home' />
Это базовая настройка, я не собираюсь публиковать полные коды, так как она становится слишком грязной.
Прямо сейчас я могу вставить счет в таблицу БД. Проблема в HomeScreen, часть getTestScoreFromSQLiteDBAndSetState выполняется только при первой загрузке приложения. Поэтому, если я закончу Test1, а затем нажмите «Домой», чтобы перейти на HomeScreen, счет не обновится.
Есть ли какая-либо техника в React Native для достижения этой цели?
EDIT:
Для тех, кто сталкивается с подобной проблемой, вот что я сделал на основе решения № 2 принятого ответа:
HomeScreen:
navigateToTest1 = () => {
this.props.navigation.navigate('test1', {
updateResult: this.updateTest1Results.bind(this)
});
}
updateTest1Results = () => {
//codes to retrieve result and setState goes here
}
Test1.js:
const { params } = this.props.navigation.state;
params.updateResult();