нашел это: https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#new -lifecycle-getderivedstatefromprops
Я почти уверен, что это то, что я ищу.
Я пытаюсь обновить свое состояние при смене реквизита, пытаясь обновить вид при смене реквизита.
(почему то, что я описываю, звучит как ракетостроение? В основном на неандертальском языке говорят Array go для просмотра)
Мой массив из подписки (нет не html .get, это просто магазин бедняков).
Я подписан в родительском и передать его как опору, потому что, очевидно, наличие его в том же компоненте не будет обновлять.
моя проблема в том, что getDerivedStateFromProps()
запускается при инициализации, но не при обновлении (по какой-то причине значение инициализации не является передается от родителя) и больше не срабатывает после этого, когда я делаю щелчок, который в конечном итоге правильно вызывает console.logs в родительском элементе.
componentDidUpdate()
с другой стороны, вообще не сработает.
У меня есть это:
interface Props {
mything: string
}
interface State {
mything: string
}
class Component extends React.Component<Props, State> {
constructor(props: any) {
super(props);
this.state = { mything: ''}
}
static getDerivedStateFromProps(props: Props, state: State) {
console.log('hi', props);
return {tanks: props.mything}
}
componentDidUpdate(prevProps: Props, prevState: State){
console.log('ho');
if(prevProps.mything !== this.props.mything){
this.setState(state => ({
mything: this.props.mything
}));
}
}
componentWillReceiveProps(nextProps: Props, nextContext: Props): void {
console.log('d')
this.setState(state => ({
mything: this.props.mything
}));
}
render() {
return(
{this.state.mything.map((thing: thingType, index: number) => {
return (
<div key={index} />
</div>
)
})}
)
}
реквизиты правильно пропущены и читаемы. Я могу успешно выполнить итерацию, но для обновлений, которые, очевидно, не то, что я хочу сделать, я хочу скопировать его в состояние и повторить его.
, поэтому в приведенном выше коде я указываю на что-то состояние, а не на проп mything.
Я не заинтересован в использовании componentDidUpdate()
или getDerivedStateFromProps()
Я просто думал, что они будут моим решением, и, как вы можете видеть выше, я попробовал componentWillReceiveProps()
с еще меньшим успехом, плюс я узнал, что это осуждается. есть UNSAFE_componentWillReceiveProps()
, но одного этого имени мне достаточно, чтобы понять, что я буду плыть вверх по течению.
но в его нынешнем виде я не могу найти способ скопировать реквизит в состояние. (и, конечно, это произойдет при смене реквизита).