[レスポンス]ライフサイクル-コンポーネントDidUpdate
構成部品ライフサイクル
3つの方法で現れる.
componentDidMount()
componentDidMount()
素子実装後に呼び出す.初期化操作はこの方法で完了します.API要求により外部からデータを取得する必要がある場合は、送信要求の適切な位置である.
componentDidUPdate()
componentDidUpdate(prevProps, prevState, snapshot)
注意事項
componentDidUpdate()
setState()を呼び出すことができますが、条件文を迂回しないと無限ループが発生する可能性があります.breakロールを持つ条件文を与えるべきです.つまり、実際の変更が発生した場合にのみ機能するようにコードを記述する必要があります.使用例(チェックボックス)
応用機器
アプリケーションコード
propsの値をポイントにしてください.
// Checkbox로 내려줄 체크된 리스트
@action
private onChangeAllCheck = () => {
this.isAll = !this.isAll;
if (this.isAll) {
this.AllCheckedList = [...allList];
} else {
this.AllCheckedList = [];
}
console.log(toJS(this.AllCheckedList))
}
...
<div>
<p>그룹 (Group) 정렬 - 전체선택</p>
// 단일체크박스
<Checkbox onChange={this.onChangeAllCheck} >전체선택</Checkbox>
// 체크박스 그룹
<CheckboxGroup options={options} onGroupChanged={action((values: any[]) => {
this.AllCheckedList = [...values];})}
values={this.AllCheckedList}/>
</div>
componentDidMount() {
const {defaultValue, values} = this.props;
if (defaultValue) {
this.checkedList = [...defaultValue];
} else if (values) {
this.checkedList = [...values];
}
}
componentDidUpdate(prevProps: Readonly<CheckboxGroupInnerProps>, prevState: Readonly<{}>, snapshot?: any): void {
if (prevProps.values !== this.props.values) {
const {values = []} = this.props;
this.checkedList = [...values];
}
}
ここで
values
はチェックボックス全体のデータを含む配列である.componentDidMount()の場合、ユーザーがデフォルトチェックのデータを持っている場合はcheckedListに入れます.そして、個別のチェックボックスがクリックされ、変更したCheckedListが親にアップロードされます.AllCheckeListがonChangeAllCheckに変更されると、propsデータも変更されます.
この変化はComponentDidUdpateで検出され、以前のpropsと現在のpropsを比較し、変更したデータをcheckedListに格納します.
取り付け後、操作素子ハンドルの統一性を保つことができます.
+)チェックボックスは、コンポーネントDidUpdateで選択されているかどうかを統一的に表すこともできます.
// 2. 체크박스 그룹의 변경에따라 자식인 체크박스의 체크여부 통일 가능
componentDidUpdate(prevProps: Readonly<CheckboxProps>, prevState: Readonly<{}>, snapshot?: any): void {
if (this.props.checked != undefined &&
prevProps.checked !== this.props.checked) {
this.isChecked = this.props.checked;
}
}
...
// 1. 체크여부를 판단하고 컨트롤하는 기본 함수
@action
private handleCheckedBox = (e: React.MouseEvent<HTMLLabelElement>) => {
const {onChange, disabled, checked, value} = this.props;
const targetValue = (e.target as HTMLLabelElement).textContent || value || '';
if (!disabled) {
if (checked) {
this.isChecked = true;
}
this.isChecked = !this.isChecked;
onChange && onChange(targetValue, this.isChecked);
}
}
classコンポーネントを使用する場合はreactが提供するライフサイクルを使用できますが、関数型コンポーネントに変化を導くreactストリームに基づいて、hookのuseEffectの使い方などの機能をさらに並行して学ぶべきだと思います.Reference
この問題について([レスポンス]ライフサイクル-コンポーネントDidUpdate), 我々は、より多くの情報をここで見つけました https://velog.io/@wjd489898/React-생명주기-ComponentDidUpdateテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol