Я проверил этот код и, похоже, он работает нормально. Не могли бы вы указать, что установлено в компоненте HermesWorker?
Изменить: вам потребуется установить свое состояние с помощью setState
при обновлении компонентов. Для этого вы можете искать componentDidUpdate
, который будет запускаться при каждом обновлении. Это отличается от componentDidMount
, который (надеюсь) будет запущен один раз, а затем компонент может обновиться и повторно отобразить, но повторный рендеринг не считается «монтированием». Вместо этого вы можете попробовать следующее:
constructor(props) {
super(props);
this.state = {
url: '',
items: [],
visited: [{name: "This Drive", path: "@back", root: ""}]
}
this.fetchData = this.fetchData.bind(this);
}
componentDidMount() {
//Mount Once
}
componentDidUpdate(prevProps, prevState) {
if (this.state.url !== this.props.url) {
this.setState({url: this.props.url});
// Url state has changed.
}
if(prevState.url !== this.state.url){
//run your fetch
this.fetchData();
}
}
fetchData(){
if (this.props.url.length === 0) return
fetch(this.props.url)
.then(res => res.json())
.then(items => this.setState({ items }));
}
Примечание: я переместил выборку в отдельную функцию, но это полностью зависит от вас.
Также обратите внимание, что я добавил url в состояние. Убедитесь, что ваши реквизиты настроены, чтобы избежать неожиданного поведения.
Edit 2: componentDidUpdate
передаст вам prevProps
и prevState
в качестве параметров. С prevProps
вы получаете доступ к всем реквизитам , которые вы получили в предыдущем обновлении, а с prevState
, как вы можете догадаться, вы получаете доступ к независимо от вашего-состояния в предыдущем обновлении. И под «в предыдущем обновлении» я имею в виду до того, как обновление было выполнено.