Как инициализировать состояние с помощью динамического ключа на основе реквизита? Реквизит — это данные, полученные из внешнего источника (асинхронно). Таким образом, реквизит изменится, когда данные будут успешно загружены. Рассмотрим такой компонент.
редактировать: я хочу сделать состояние динамическим, потому что я хочу создать диалоговое окно (всплывающее окно) на основе элемента, по которому щелкнули. DialogContainer
в основном это. visible
prop сделает этот диалог видимым, а onHide
prop скроет этот диалог. Я использую библиотеку react-md.
class SomeComponent extends React.Component {
constructor() {
super();
this.state = {};
// the key and value will be dynamically generated, with a loop on the props
// something like:
for (const item of this.props.data) {
this.state[`dialog-visible-${this.props.item.id}`] = false}
}
}
show(id) {
this.setState({ [`dialog-visible-${id}`]: true });
}
hide(id) {
this.setState({ [`dialog-visible-${id}`]: false });
}
render() {
return (
<div>
{this.props.data.map((item) => {
return (
<div>
<div key={item.id} onClick={this.show(item.id)}>
<h2> Show Dialog on item-{item.id}</h2>
</div>
<DialogContainer
visible={this.state[`dialog-visible-${item.id}`]}
onHide={this.hide(item.id)}
>
<div>
<h1> A Dialog that will pop up </h1>
</div>
</DialogContainer>
</div>
);
})}
</div>
)
}
}
// the data is fetched by other component.
class OtherComponent extends React.Component {
componentDidMount() {
// fetchData come from redux container (mapDispatchToProps)
this.props.fetchData('https://someUrlToFetchJSONData/')
}
}
Затем данные передаются через Redux.
Однако, насколько я понимаю до сих пор, состояние может быть обновлено на основе реквизита с componentWillReceiveProps
или новым getDerivedStateFromProps
(а не на конструкторе, как указано выше). Но как это сделать в любом методе?
Пример здесь объясняется только, когда состояние инициализируется в конструкторе, и вызывается setState
либо в cWRP, либо в gDSFP. Но я хочу, чтобы пара значений ключа инициализировалась динамически.
Любая помощь/подсказка будет принята с благодарностью. Пожалуйста, скажите, если мой вопрос недостаточно ясен.
for loop
в конструкторе,props.data
должен быть предоставлен избыточностью? - person forJ   schedule 09.04.2018render()
- person forJ   schedule 09.04.2018