2017-01-06 4 views
-1

Это вопрос о том, как реагировать на реакцию и как работают компоненты в массивах.Reactjs не реиндексирует для массива компонентов

Так я функция, которая создает массив компонентов, но в users реквизита пусто, если я делаю это следующим образом:

// General look of the component 
// <StartMultiple key={this.count} users={this.state.users} id={this.count} delete_this={this.delete_this}/> 

// Just an example 
this.array = [] 
add_repeat() // do this 5 times, for example 

render(
    {this.array} // users prop is empty 
) 

add_repeat() 
{ 
    this.repeats.push(<StartMultiple key={this.count} users={this.state.users} id={this.count} delete_this={this.delete_this}/>); 
    this.setState({ repeats: this.repeats }); 
    this.count++; 
} 

Но если я просто наклеить <StartMultiple key={this.count} users={this.state.users} id={this.count} delete_this={this.delete_this}/> непосредственно в return()render() обновляет свои реквизиты при необходимости. (обновляется с помощью this.setState())

Итак, мой вопрос в том, есть ли способ исправить этот пустой реквизит массива в массиве компонентов или просто посмотреть, как отображать их по-другому? Например. map()

+1

Когда вы следуете за первый подход, это не отправить отправить реквизита ребенку или оно не делают. ваша проблема непонятна. –

+0

он отображает, но пользовательская подсказка установлена ​​неправильно (пусто) –

ответ

1

Реагирующие компоненты не входят в состояние, состояние реакции должно содержать сериализуемое состояние приложения, а не компоненты, которые являются визуальным представлением этого состояния.

Пожалуйста, смотрите здесь, под «что не должно идти в состоянии»:

http://web.archive.org/web/20150419023006/http://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html#what-shouldnt-go-in-state

+0

Это был действительно просто тест. Способ, которым он будет функционировать в режиме реального времени, состоит в том, что он берет некоторые данные из бэкэнд, а затем использует эти данные для создания массива компонентов. Но я думаю, что это также связано с тем, что я использовал обещания, чтобы создать массив до того, как данные были обновлены. Тем не менее, я ожидал, что компоненты будут повторно отображены, когда это сделает государство. –

+0

Прохладный. Даже без асинхронного материала, ваш оригинальный фрагмент не должен работать, попробуйте сосредоточиться на сохранении данных в вашем состоянии, а не на визуальном представлении. – Chris

+0

Ну, мне удалось заставить его работать (есть результаты для пользователя, прежде чем он их создает). Поскольку они всего лишь статическая информация, я думаю, что все будет хорошо. Но просто для уточнения, синус Я помещаю эти данные в компонент OUTSIDE рендеринга, это означает, что они не признают, что были повторно отображены, правильно? –