TIL-33 React Lifecycle
1.ライフサイクルの順序
2.ライフサイクルの重要性
componentDidMountを使用してmockデータをロード中にエラーが発生しました.
代表的なライフサイクルの問題class ProductDetail extends Component {
constructor(props) {
super(props);
this.state = {
productInfoList: [],
};
}
componentDidMount() {
fetch('/data/productData.json', {
method: 'GET',
})
.then(res => res.json())
.then(data => {
this.setState({
productInfoList: data.results,
});
});
}
render() {
const { productInfoList } = this.state;
return (
<>
<div className="productDetail">
<div className="nav">임시</div>
<div className="list">
<span className="home">홈</span>
<span className="category">
{productInfoList.section[0]}
</span>
順序を表示するには、まずコンストラクション関数を実行し、renderを実行します.
ただし、ProductInfoListはsetStateが実行される前の空の配列です.
空の配列にsection[0]というキー値が見つからないため、エラーが発生しました.
ただし、{ProductInfoList}のみを使用している場合は、最初は未定義のエラーメッセージが発生し、エラーメッセージが発生しない可能性があります.
3. 🌈 解析(条件付きレンダリング)
条件付きレンダリングが使用されます.class ProductDetail extends Component {
constructor(props) {
super(props);
this.state = {
productInfoList: [],
};
}
componentDidMount() {
fetch('/data/productData.json', {
method: 'GET',
})
.then(res => res.json())
.then(data => {
this.setState({
productInfoList: data.results,
});
});
}
render() {
const { productInfoList } = this.state;
return (
<img src={productInfoList.images && productInfoList.images[0].image_url}className="miniPhoto">
<img src={productInfoList.images && productInfoList.images[0].image_url}className="miniPhoto">
productInfoList.imagesがtrueの場合、productInfoList.images[0].イメージurlをレンダリングします.そういう意味です.
&&演算子を使うときの注意点!
class ProductDetail extends Component {
constructor(props) {
super(props);
this.state = {
productInfoList: [],
};
}
componentDidMount() {
fetch('/data/productData.json', {
method: 'GET',
})
.then(res => res.json())
.then(data => {
this.setState({
productInfoList: data.results,
});
});
}
render() {
const { productInfoList } = this.state;
return (
<>
<div className="productDetail">
<div className="nav">임시</div>
<div className="list">
<span className="home">홈</span>
<span className="category">
{productInfoList.section[0]}
</span>
条件付きレンダリングが使用されます.
class ProductDetail extends Component {
constructor(props) {
super(props);
this.state = {
productInfoList: [],
};
}
componentDidMount() {
fetch('/data/productData.json', {
method: 'GET',
})
.then(res => res.json())
.then(data => {
this.setState({
productInfoList: data.results,
});
});
}
render() {
const { productInfoList } = this.state;
return (
<img src={productInfoList.images && productInfoList.images[0].image_url}className="miniPhoto">
<img src={productInfoList.images && productInfoList.images[0].image_url}className="miniPhoto">
productInfoList.imagesがtrueの場合、productInfoList.images[0].イメージurlをレンダリングします.そういう意味です.&&演算子を使うときの注意点!
0
はfalse
です.“”
もfalse
である.https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
Reference
この問題について(TIL-33 React Lifecycle), 我々は、より多くの情報をここで見つけました https://velog.io/@ssxst31/TIL-33-React-Lifecycleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol