Реализация ниже должна решить вашу проблему: -
const Fruits = () => {
const [fruitInput, setFruitInput] = useState("");
const [fruits, setFruits] = useState(["Apple", "Orange"]);
const addFruit = () => {
const newFruits = [...fruits];
newFruits.push(fruitInput);
setFruits(newFruits);
console.log(newFruits);
};
useEffect(() => {
console.log("fruits was updated", fruits);
}, [fruits]);
return (
<>
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
<input
type="text"
onChange={e => setFruitInput(e.target.value)}
value={fruitInput}
/>
<button onClick={addFruit}>Add Fruit</button>
</>
);
};
Объяснение:
Когда вы используете [fruits]
в useEffect
, тогда выполняется глубокое сравнение, поэтому вы должны убедиться, что новое значение в fruits
отличается от того, что было раньше. Простое нажатие значения в массиве не приведет к обновлению.