Senior Front - канал для front-end программистов, здесь есть много всего про CSS3, Javascript, Html5, Angular, React, видео / статьи / курсы
updateState = () => {
this.state.name = "Chris1993";
}
В консоли выведется предупреждение:
⚠️ Do not mutate state directly. Use setState().
✅ Решение:
// ClassComponent:используй setState()
this.setState({ name: "Chris1993" });
// FunctionComponent:используй useState()
const [name, setName] = useState("");
setName("Chris1993");
Привязка состояния напрямую к свойству value инпута
⚠️ Проблема:
Если напрямую привязать значение state как параметр к value инпута, то окажется, что чтобы мы не вводили в поле, его value не изменяется.
export default function App() {
const [count, setCount] = useState(0);
return <input type="text" value={count} />;
}
Это произошло потому что мы использовали переменную состояния как значение по умолчанию для параметра value, a value является динамическим значением. Но state в функциональных компонентах может быть изменен только через set метод, возвращаемый useState. Так что решение очень простое — используй set для изменения значения.
✅ Решение:
Используй onChange ивент и изменяй значение инпута с помощью setCount.
export default function App() {
const [count, setCount] = useState(0);
const change = (val) => setCount(val.value);
return <input type="text" value={count} onChange={change} />;
}
Забывать очищать побочные эффекты в useEffect
⚠️ Проблема:
В классовых компонентах мы используем метод componentWillUnmount() для очистки созданных ресурсов, например, идентификаторов таймеров и обработчиков событий.
✅ Решение:
В useEffect() для очистки ресурсов можно использовать возврат функции, что схоже с ролью метода componentWillUnmount()
useEffect(() => {
// Other Code
return () => clearInterval(id);
}, [name, age]);
👉 @seniorFront <div class='outer'>
<p class='inner'></p>
</div>
innerHTML возвратит:
<p class='inner'></p>outerHTML возвратит:
<div class='outer'><p class='inner'></p></div>
👉 @seniorFront solution('abc', 'bc') // returns true
solution('abc', 'd') // returns false
👉 @seniorFront