Я пытаюсь обновить дочерний элемент на основе родительского состояния.React - Обновление ребенка
В родителю:
<ImageGallery id={this.state.id} images={this.state.images} />
В детстве:
render(){
console.log("Rendering.............. gallery ");
console.log(this.props.images);
var images = this.props.images.map(function(image, i){
return (
<Image key={image.id} source={image.source} style={{width: 400, height: 400}}></Image>
);
});
console.log("Array of images to render: => ");
console.log(images);
return (
<View>{images}</View>
);
}
Но рендер только раз, потому что исходное состояние является пустым, то данные извлекаются на компоненте родителя сделал крепление ,
EDIT Отвечая на вопросы
как обновить состояние родительского компонента, и как вы планируете обновить> ребенок? - havenchyk
Потому что государство в настоящее время ссылаются на ребенка:
//Here
images={this.state.images}
EDIT 2
Это мой компонент сделал крепление:
1- Запрос список объектов изображений 2- затем получение этих изображений как blob 3- с помощью base64, чтобы отобразить изображение 4- создания объекта источника для отображения на который будет использоваться на ребенка 5- меняющегося состояния
async componentDidMount() {
try{
let response = await API.get(`communities/${this.state.id}/community-pictures`);
let json = await response.json();
if (!response.ok) {
throw json;
}
let images = json.data;
let newImages = [];
images.forEach(async (image) => {
let response = await API.request_blob(`communities/${this.state.id}/community-pictures/${image.id}/view`);
let data = await response.base64();
let type = response.respInfo.headers['Content-Type'];
let imageUri = `data:${type};base64,` + data;
let source = {uri: imageUri, scale: 1};
newImages.push(Object.assign(image, {source: source}));
});
this.setState({
images: newImages
});
console.log("Changing images!!");
console.log(this.state);
} catch (json) {
// Surppressing this error
}
}
И вы можете извлечь ребенка визуализации. Он использует this.props.images для установки экрана. Но не работает. Родитель изменяет свои состояния и ребенок не обновляется.
EDIT SUPER WIERD Ребята, я заметил что-то очень странное. Я добавил console.log на componentDidMount, чтобы увидеть новое состояние. Проверьте, что хром печатает:
Но, когда я открыть объект, чтобы увидеть массив, проверить его:
WOW !! Что такое хапеннин ?!
как обновить состояние родительского компонента, и как вы ожидаете, чтобы обновить ребенка? – havenchyk
Вы устанавливаете состояние в родительском после получения данных в componentDidMount()? Это вызовет другой рендер. –
вы можете показать код, в котором вы извлекаете данные? –