PureComponent
PureComponent γ― Component γ¨δΌΌγ¦γγΎγγγεγ props γ¨ state γ«ε―Ύγγ¦γ―εγ¬γ³γγΌγγΉγγγγγΎγγγ―γ©γΉγ³γ³γγΌγγ³γγ―γΎγ React γ«γγ£γ¦γ΅γγΌγγγγ¦γγΎγγγζ°γγγ³γΌγγ§οΏ½?δ½Ώη¨γ―ζ¨ε₯¨γγγΎγγγ
class Greeting extends PureComponent {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}γͺγγ‘γ¬γ³γΉ
PureComponent
εγ props γ¨ state γ«ε―Ύγγ¦γ―γ©γΉγ³γ³γγΌγγ³γοΏ½?εγ¬γ³γγΌγγΉγγγγγγε ΄εγComponent οΏ½?代γγγ« PureComponent γηΆζΏγγΎγγ
import { PureComponent } from 'react';
class Greeting extends PureComponent {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}PureComponent γ― Component οΏ½?γ΅γγ―γ©γΉγ§γγγγγΉγ¦οΏ½? Component API γγ΅γγΌγγγ¦γγΎγγPureComponent γζ‘εΌ΅γγγγ¨γ―γprops γ¨ state γζ΅
γζ―θΌγγγ«γΉγΏγ οΏ½? shouldComponentUpdate γ‘γ½γγγοΏ½?οΏ½ηΎ©γγγγ¨γ¨εηγ§γγ
δ½Ώη¨ζ³
γ―γ©γΉγ³γ³γγΌγγ³γοΏ½?δΈθ¦γͺεγ¬γ³γγΌγγΉγγγγγ
React γ―ιεΈΈγθ¦ͺγεγ¬γ³γγΌγγγγγ³γ«γ³γ³γγΌγγ³γγεγ¬γ³γγΌγγΎγγζι©εγ¨γγ¦γζ°γγ props γ state γε€γ props γ state γ¨εγγ§γγιγγθ¦ͺγεγ¬γ³γγΌγγγ¦γ React γεγ¬γ³γγΌγθ‘γγͺγγγ¨γγγ³γ³γγΌγγ³γγδ½ζγγγγ¨γγ§γγΎγγγ―γ©γΉγ³γ³γγΌγγ³γγ§γ―γPureComponent γηΆζΏγγγγ¨γ«γγγγοΏ½?ζεγζεΉεγ§γγΎγγ
class Greeting extends PureComponent {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}React γ³γ³γγΌγγ³γγ―εΈΈγ«η΄η²γͺγ¬γ³γγΌγγΈγγ―γζγ€γΉγγ§γγγγγ―γγͺγγ‘γγοΏ½? propsγstateγγ³γ³γγ―γΉγγε€γγγͺγε ΄εγ―γεΈΈγ«εγεΊεγθΏγεΏ
θ¦γγγγγ¨γγζε³γ§γγPureComponent γδ½Ώη¨γγγγ¨γ§γγγͺγοΏ½?γ³γ³γγΌγγ³γγγοΏ½?θ¦δ»ΆγζΊγγγ¦γγγ¨ React γ«δΌγγγγ¨γγ§γγγοΏ½?γγ React γ― props γ¨ state γε€γγγͺγιγεγ¬γ³γγΌγγεΏ
θ¦γγͺγγ¨ε€ζγγΎγγγγ γγδ½Ώη¨γγ¦γγγ³γ³γγ―γΉγγε€ζ΄γγγε ΄εγγ³γ³γγΌγγ³γγ―εγ¬γ³γγΌγγγΎγγ
δ»₯δΈοΏ½?δΎγ§γname γε€ζ΄γγγγγ³γ« Greeting γ³γ³γγΌγγ³γγεγ¬γ³γγΌγγγοΌname γ props γ¨γγ¦ζΈ‘γγγ¦γγγγοΌγγaddress γε€ζ΄γγγ¦γεγ¬γ³γγΌγγγͺγοΌGreeting γ« props γ¨γγ¦ζΈ‘γγγ¦γγͺγγγοΌγγ¨γ«ζ³¨οΏ½?γγ¦γγ γγγ
import { PureComponent, useState } from 'react'; class Greeting extends PureComponent { render() { console.log("Greeting was rendered at", new Date().toLocaleTimeString()); return <h3>Hello{this.props.name && ', '}{this.props.name}!</h3>; } } export default function MyApp() { const [name, setName] = useState(''); const [address, setAddress] = useState(''); return ( <> <label> Name{': '} <input value={name} onChange={e => setName(e.target.value)} /> </label> <label> Address{': '} <input value={address} onChange={e => setAddress(e.target.value)} /> </label> <Greeting name={name} /> </> ); }
代ζΏζοΏ½?οΏ½
PureComponent γ―γ©γΉοΏ½?γ³γ³γγΌγγ³γγγι’ζ°γ³γ³γγΌγγ³γγΈοΏ½?η§»θ‘
ζ°γγγ³γΌγγ§γ―γγ―γ©γΉγ³γ³γγΌγγ³γοΏ½?代γγγ«ι’ζ°γ³γ³γγΌγγ³γγδ½Ώη¨γγγγ¨γζ¨ε₯¨γγΎγγδ»₯δΈγ§γ―γζ’εοΏ½? PureComponent γδ½Ώη¨γγγ―γ©γΉγ³γ³γγΌγγ³γγγγε ΄εγγ©οΏ½?γγγ«η§»θ‘γγγγθͺ¬ζγγΎγγγγ‘γγε
οΏ½?γ³γΌγγ§γγ
import { PureComponent, useState } from 'react'; class Greeting extends PureComponent { render() { console.log("Greeting was rendered at", new Date().toLocaleTimeString()); return <h3>Hello{this.props.name && ', '}{this.props.name}!</h3>; } } export default function MyApp() { const [name, setName] = useState(''); const [address, setAddress] = useState(''); return ( <> <label> Name{': '} <input value={name} onChange={e => setName(e.target.value)} /> </label> <label> Address{': '} <input value={address} onChange={e => setAddress(e.target.value)} /> </label> <Greeting name={name} /> </> ); }
γοΏ½?γ³γ³γγΌγγ³γγγ―γ©γΉγγι’ζ°γ«η§»θ‘γγγε ΄εγ―γmemo γ§γ©γγγγ¦γγ γγγ
import { memo, useState } from 'react'; const Greeting = memo(function Greeting({ name }) { console.log("Greeting was rendered at", new Date().toLocaleTimeString()); return <h3>Hello{name && ', '}{name}!</h3>; }); export default function MyApp() { const [name, setName] = useState(''); const [address, setAddress] = useState(''); return ( <> <label> Name{': '} <input value={name} onChange={e => setName(e.target.value)} /> </label> <label> Address{': '} <input value={address} onChange={e => setAddress(e.target.value)} /> </label> <Greeting name={name} /> </> ); }