Dans le composant de classe Réagir simple, nous avons utilisé pour modifier les accessoires pour indiquer de cette façon:
constructor(props) {
super(props)
this.state = {
pitch: props.booking.pitch,
email: props.booking.email,
firstName: props.booking.firstName,
arrivalDate: props.booking.arrivalDate
}
}
Mais je ne sais pas comment le faire dans une nouvelle fonctionnalité comme Hooks, mais j'essaie de le faire de cette façon.
const GenerateDescHook = ({ description: initialDesc }) => {
const [description, setDescription] = useState(null)
useEffect(() => {
setDescription(initialDesc)
}, {})
function handleChangeVariance(newVariance) {
setDescription({
...description,
template: {
...description.template,
variance_name: newVariance,
},
})
}
}
Fondamentalement, j'ai juste besoin de changer les accessoires de description, qui viennent d'un autre composant parent pour passer à l'état. Pls, pourriez-vous me montrer comment le faire d'une manière nouvelle comme la méthode Hooks?
Vous pouvez passer votre état initial comme premier argument à useState
comme ceci:
const GenerateDescHook = ({ description: initialDesc }) => {
const [description, setDescription] = useState(initialDesc)
...
Le problème dans votre code est avec {}
. Le crochet UseEffect attend et le tableau, pas un objet. Utilisation [initialDesc]
au lieu.
C'est ainsi que vous réinitialisez l'état des composants lorsque les accessoires changent
const GenerateDescHook = ({ description: initialDesc }) => {
const [description, setDescription] = useState(null)
useEffect(() => {
setDescription(initialDesc)
}, [initialDesc]);
}
C'est ainsi que vous initialisez l'état du composant à la valeur prop lors du premier rendu uniquement
const GenerateDescHook = ({ description: initialDesc }) => {
const [description, setDescription] = useState(initialDesc);
}
La valeur initiale de votre état est celle passée dans useState
:
const GenerateDescHook = ({ description: initialDesc }) => {
const [description, setDescription] = useState(initialDesc)
Comme l'indique documentation :
function Example() {
// Declare a new state variable, which we'll call "count"
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
Est l'équivalent de:
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
</div>
);
}
}