Как использовать setInterval в React
2 года назад·2 мин. на чтение
В этой статье рассмотрим использование функции setInterval в хуках react и компонентах на основе классов.
Что такое функция setInterval
?
Функция setInterval()
используется для многократного вызова функции или фрагмента кода через определенный промежуток времени.
Пример:
Единственный способ остановитьsetInterval(() => { console.log('you can see me every 3 seconds') }, 3000);
setInterval
— вызвать функцию clearInterval
с идентификатором или закрыть окно.
Использование setInterval
в React хуках
Мы можем использовать функцию setInterval
в React, точно так же, как мы можем использовать в JavaScript.
В приведенном ниже примере мы используем функцию setInterval
внутри хука useEffect
.
Хук// App.js import React, { useEffect, useState } from "react"; export default function App() { const [seconds, setSeconds] = useState(1); useEffect(() => { const timer = setInterval(() => { setSeconds(seconds => seconds + 1); }, 1000); // очистка интервала return () => clearInterval(timer); }); return ( <div className="App"> <h1>Number of seconds is {seconds}</h1> </div> ); }
useEffect
запускает функцию обратного вызова (колбэк) при подключении компонента к dom, что аналогично методу жизненного цикла componentDidMount
в компонентах-классах.
Функция setInterval
запускает метод setSeconds
каждую секунду.
Внутри хука useEffect
мы возвращаем функцию clearInterval
с аргументом timer
, так что функция setInterval
останавливается при отключении компонента от dom, что аналогично методу componentWillUnmount
.
Использование setInterval
в классовых компонентах
В этом примере показано, как использовать setInterval
в компонентах-классах.
В приведенном выше примере мы увеличиваем свойство// App.js import React from "react"; class App extends React.Component { state = { seconds: 1 }; componentDidMount() { this.timer = setInterval(() => { this.setState({ seconds: this.state.seconds + 1 }); }, 1000); } componentWillUnMount() { clearInterval(this.timer); } render() { return ( <div className="App"> <h1>Number of seconds is {this.state.seconds}</h1> </div> ); } } export default App;
this.state.seconds
с помощью функции setInterval()
.Работа с порталами в React: создание модальных окон и всплывающих сообщений
2 месяца назад·3 мин. на чтение
В этой статье мы рассмотрим, как использовать порталы в React для создания модальных окон и всплывающих сообщений.
Одной из самых интересных и полезных функциональностей React является работа с порталами. В этой статье мы рассмотрим, как создать модальные окна и всплывающие сообщения с использованием порталов в функциональных компонентах React.
Порталы в React позволяют отрендерить дочерний компонент в другой DOM элемент, который находится вне иерархии компонента. Это может быть полезно, когда требуется рендерить компоненты в других частях страницы или даже вне контейнера приложения.
Для начала, установим все необходимые зависимости. Откройте командную строку и выполните следующую команду:
Теперь создадим компонент, который будет использовать модальное окно. Создайте новый файл
Теперь давайте рассмотрим, как создать всплывающие сообщения с использованием порталов.
Создайте новый файл
Окончив установку, импортируйтеnpm install react-dom
ReactDOM
в файле компонента:
Теперь давайте создадим простой модальный компонент. Создайте новый файлimport ReactDOM from 'react-dom';
Modal.js
и добавьте следующий код:
В этом компоненте мы используемimport React from 'react'; const Modal = ({ isOpen, onClose, children }) => { if (!isOpen) { return null; } return ReactDOM.createPortal( <div className="modal"> <div className="modal-content">{children}</div> <button onClick={onClose}>Закрыть</button> </div>, document.getElementById('modal-root') ); }; export default Modal;
ReactDOM.createPortal
для отображения содержимого модального окна в элементе с идентификатором 'modal-root'
. Помните, что этот элемент должен быть добавлен в HTML файл вашего проекта:
<body> <div id="root"></div> <div id="modal-root"></div> </body>
App.js
и добавьте следующий код:
В этом компоненте мы используемimport React, { useState } from 'react'; import Modal from './Modal'; const App = () => { const [isOpen, setIsOpen] = useState(false); const handleOpenModal = () => { setIsOpen(true); }; const handleCloseModal = () => { setIsOpen(false); }; return ( <div> <button onClick={handleOpenModal}>Открыть модальное окно</button> <Modal isOpen={isOpen} onClose={handleCloseModal}> <h1>Модальное окно</h1> <p>Это модальное окно!</p> </Modal> </div> ); }; export default App;
useState
для создания состояния isOpen
, которое определяет, открыто ли модальное окно или нет. При нажатии на кнопку "Открыть модальное окно"
состояние isOpen
устанавливается в true
, что вызывает рендеринг модального окна. Когда модальное окно закрывается, состояние isOpen
устанавливается в false
.
Теперь, чтобы отобразить наше приложение, импортируйте компонент App
в файл index.js
:
Теперь, если вы запустите свое приложение React, вы должны увидеть кнопкуimport React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; ReactDOM.render(<App />, document.getElementById('root'));
"Открыть модальное окно"
. При нажатии на эту кнопку откроется модальное окно с заголовком "Модальное окно"
и текстом "Это модальное окно!"
. Если вы нажмете на кнопку "Закрыть"
, модальное окно закроется.
Toast.js
и добавьте следующий код:
В этом компоненте мы используемimport React from 'react'; import ReactDOM from 'react-dom'; const Toast = ({ message }) => { return ReactDOM.createPortal( <div className="toast">{message}</div>, document.getElementById('toast-root') ); }; export default Toast;
ReactDOM.createPortal
для отображения всплывающего сообщения в элементе с идентификатором 'toast-root'
. Помимо сообщения, мы можем редактировать стили внутри компонента toast
, чтобы обеспечить пользовательскую информацию и удобство использования.
Добавьте следующий код в компонент App.js
, чтобы использовать всплывающее сообщение:
В этом коде мы добавили новое состояниеimport React, { useState } from 'react'; import Modal from './Modal'; import Toast from './Toast'; const App = () => { const [isOpen, setIsOpen] = useState(false); const [showToast, setShowToast] = useState(false); const handleOpenModal = () => { setIsOpen(true); }; const handleCloseModal = () => { setIsOpen(false); }; const handleShowToast = () => { setShowToast(true); setTimeout(() => { setShowToast(false); }, 2000); }; return ( <div> <button onClick={handleOpenModal}>Открыть модальное окно</button> <button onClick={handleShowToast}>Показать всплывающее сообщение</button> <Modal isOpen={isOpen} onClose={handleCloseModal}> <h1>Модальное окно</h1> <p>Это модальное окно!</p> </Modal> {showToast && <Toast message="Привет, я всплывающее сообщение!" />} </div> ); }; export default App;
showToast
, которое определяет, должно ли отображаться всплывающее сообщение или нет. При нажатии на кнопку "Показать всплывающее сообщение"
состояние showToast
становится true
и всплывающее сообщение отображается. Через 2 секунды после отображения сообщение исчезает, так как мы используем setTimeout
в функции handleShowToast
.
Добавьте элемент toast-root
в ваш html-файл, также как и с элементом modal-root
:
Теперь, при запуске приложения и нажатии на кнопку<body> <div id="root"></div> <div id="modal-root"></div> <div id="toast-root"></div> </body>
"Показать всплывающее сообщение"
, вы должны увидеть всплывающее сообщение с текстом "Привет, я всплывающее сообщение!"
. Через 2 секунды оно исчезнет автоматически.
Поздравляю, вы только что освоили работу с порталами React и создали модальные окна и всплывающие сообщения в функциональных компонентах React. Теперь вы можете использовать эти знания в своих проектах, чтобы создавать лучший пользовательский интерфейс.