Я пытался вызвать функцию, которая находится на экране навигатора, с его экрана.
Чтобы прояснить ситуацию, вот фрагмент моего кода...
//ScreenA.js
export default class ScreenA extends React.Component {
showWarning(){
this.setState({showWarning: true});
setTimeout(function() {
this.setState({showWarning: false});
}.bind(this), 3000);
}
render() {
return (
<View style={{backgroundColor : this.state.showWarning ? "#red" : "#blue"}}>
{this.state.showWarning && <Warning />}
</View>
)
}
}
//Nagigator.js
default export const Navigator = StackNavigator({
ScreenA: {screen: ScreenA},
ScreenB: {screen: ScreenB},
});
//App.js
export default class App extends React.Component {
handleSubmit(qrCode){
if(qrCodeIsInvalid){
this.navigator.ScreenA.showWarning();
//This is just a sudo code.
//How do we call ScreenA.showWarning here?
}
}
render() {
let props = {/*some props here*/};
return (//This "ref" stops the application without describing any reason
<Navigator screenProps={props} ref={nav => { this.navigator = nav; }}/>
);
}
}
Существует пример того, как вызвать функцию из навигации header, но не из класса, который export
s является навигатором.
Я думал, что к каждому экрану можно получить доступ через ref, но это вызывает ошибку без объяснения того, что происходит.
Кто-нибудь сталкивался с похожей ситуацией?
Любые советы будут оценены.
P.S.
@ Нимрод Аргов
Вот подробности того, чего я пытался достичь.
ScreenA
имеет считыватель QR-кодов и функцию submit
, которая отправляет QR-коды в App.js
.
App.js
имеет функцию handleSubmit, где представленные QR-коды отправляются на сервер и помечаются как действительные или недействительные.
Если отправленный QR-код оказывается недействительным, ScreenA
должен показать предупреждающее сообщение и изменить цвет фона на 3 секунды.
Этого можно достичь, если App.js
передать реквизит {showWarning:true}
ScreenA
и передать {showWarning:false}
за 3 секунды.
Однако я думал, что ScreenA
будет обязан изменить цвет фона. Таким образом, я установил setTimeout
и setState
в файле showWarning()
.