#react-native
#react-native
Вопрос:
У меня есть приложение с панелью навигации с 2 экранами. Когда я применяю функцию на экране / компоненте 1, я хочу отобразить или вызвать изменение на втором экране.
есть ли способ либо повторно отобразить экран при вводе, либо обновить состояние другого экрана?
Компонент один:
export default class HomeScreen extends React.Component {
constructor() {
super();
}
_onPress(){
try {
await AsyncStorage.setItem('value', 'changed Value');
} catch (error) {
console.log(error.message);
}
console.log("saved: " this.state.userName )
}
render() {
return (
<View style={styles.container}>
<Button title="btn" onPress={() => this._onPress()} >
</Button>
</View>
)
}
компонент 2:
export default class SecondScreen extends React.Component {
constructor() {
super();
this.state = {some : ''}
}
async getValue () {
let recievedValue = '';
try {
let promise = await AsyncStorage.getItem('value') || 'cheeseCake';
promise.then((value) => recievedValue = value)
} catch (error) {
// Error retrieving data
console.log(error.message);
}
return recievedValue
}
render() {
var value= this.getValue();
return (
<View style={styles.container}>
<Text>
HERE CHANGED VALUE: {value}
</Text>
<Button onPress={()=> this.setState((prev)=> {some:'Thing'})}>
</Button>
</View>
)
}
Когда я нажимаю кнопку на экране 1 (рабочий стол), значение сохраняется.
Но это отображается только на втором экране, когда я запускаю изменение состояния нажатием кнопки.
Как мне отобразить экран при посещении экрана через панель навигации?
Комментарии:
1. Можете ли вы предоставить пример gif, чтобы я мог легко понять…
2. @Tanveerbyn Я предоставил gif
3. Как перейти к экрану 2 после нажатия кнопки?
4. В идеале вы должны передать значение через родительский элемент в качестве реквизита, чтобы он мог обновлять дочерние элементы. Вы пробовали использовать какие-либо компоненты жизненного цикла из React? Вы можете попробовать использовать
componentDidUpdate
и обновить некоторое состояние, чтобы вызвать повторный рендеринг5. Есть панель навигации @UmairAhmed, первый элемент — первый экран, второй — экран 2. также при обновлении ничего не происходит. Я перепробовал все. Как только панель навигации получит экраны, она их отобразит. затем они остаются отображаемыми до изменения состояния.
Ответ №1:
Вы пробовали EventEmiter
?
Используйте этот пользовательский прослушиватель событий: https://github.com/meinto/react-native-event-listeners
например:
import { EventRegister } from 'react-native-event-listeners'
/*
* RECEIVER COMPONENT
*/
class Receiver extends PureComponent {
constructor(props) {
super(props)
this.state = {
data: 'no data',
}
}
componentWillMount() {
this.listener = EventRegister.addEventListener('myCustomEvent', (data) => {
this.setState({
data,
})
})
}
componentWillUnmount() {
EventRegister.removeEventListener(this.listener)
}
render() {
return <Text>{this.state.data}</Text>
}
}
/*
* SENDER COMPONENT
*/
const Sender = (props) => (
<TouchableHighlight
onPress={() => {
EventRegister.emit('myCustomEvent', 'it works!!!')
})
><Text>Send Event</Text></TouchableHighlight>
)