Обложка канала

Senior Frontend - javascript, html, css

20191 @seniorFront

Senior Front - канал для front-end программистов, здесь есть много всего про CSS3, Javascript, Html5, Angular, React, видео / статьи / курсы

Senior Frontend - javascript, html, css

3 года назад
Открыть в
Ошибки при использовании React По мере того, как React набирает популярность, все больше разработчиков сталкиваются с разнообразными проблемами. Изменение состояния прямым присваиванием значения В 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