Мы все открывали сайт в понедельник и, вероятно, видели текст, говорящий нам: «Сегодня понедельник, начало новой недели, считайте это», а когда мы открываем тот же сайт в пятницу, мы видим текст вроде «Выходные». близок, сделайте последний рывок, сегодня пятница».

Я, наверное, думал, что это их разработчик каждый день меняет текст, но это не так. В этой статье вы узнаете, как динамически отображать разные тексты/изображения/данные в разные дни недели в React.

Давайте запустим наше реагирующее приложение и удалим шаблон в App.js.

 npx create-react-app display-text-dynamically-on-different-days
 cd display-text-dynamically-on-different-days

Прежде всего, нам нужно создать массив текстовых сообщений, которые мы хотим отображать в разные дни, начиная с воскресенья и заканчивая субботой.

Каждый объект в нашем массиве будет иметь текст и день.

import "./App.css";

function App() {
  const messages = [
    {
      text: "It is Sunday morning",
      day: "Sunday",
    },
    {
      text: "It is Monday morning",
      day: "Monday",
    },
    {
      text: "It is Tuesday morning",
      day: "Tuesday",
    },
    {
      text: "It is Wednesday morning",
      day: "Wednesday",
    },
    {
      text: "It is Thursday morning",
      day: "Thursday",
    },
    {
      text: "It is Friday morning",
      day: "Friday",
    },
    {
      text: "It is Saturday morning",
      day: "Saturday",
    },
  ];
  return <div className="App"></div>;
}

export default App;

Чтобы увидеть, работает ли это, мы можем сопоставить этот массив и отобразить текст и день для каждого дня.

Внутри возврата давайте отладим то, что у нас есть.

 return (
    <div className="App">
      {messages.map((message) => (
        <div>
          <h1>{message.text}</h1>
          <h2>{message.day}</h2>
        </div>
      ))}
    </div>
  );

Если мы запустим наш сервер с

npm run start

В Javascript есть метод Date.getDay(), который возвращает день недели (от 0 до 6) даты.

Если мы выведем console.log непосредственно перед оператором return и посмотрим на нашу консоль.

 const date = new Date();
 console.log(date.getDay());

Если вы посмотрите на свою консоль, вы должны увидеть целое число от 0 до 6.

Если вы хотите получить название дня недели (а не просто число), мы можем получить массив всех дней недели, а затем использовать индекс, полученный из функции getDay().

 const date = new Date();
  const weekday = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
  console.log(weekday[date.getDay()]);

Теперь, если вы посмотрите на консоль, вы должны увидеть текущую дату.

Теперь у нас есть 2 вещи, которые мы можем использовать, чтобы заставить нашу функцию работать: доступ к текущему дню и массив со всеми днями и текстами для каждого дня.

Мы сохраним текущий день в состоянии, а затем пройдемся по массиву сообщений и проверим, равен ли текущий день дню в массиве, а затем отобразим текст.

Теперь компонент будет

import "./App.css";
import React, { useState, useEffect } from "react";

function App() {
  const date = new Date();
  const weekday = [
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
  ];
  const [currentDay, setCurrentDay] = useState("");
  useEffect(() => {
    setCurrentDay(weekday[date.getDay()]);
  }, [currentDay]);
  const messages = [
    {
      text: "It is Sunday morning",
      day: "Sunday",
    },
    {
      text: "It is Monday morning",
      day: "Monday",
    },
    {
      text: "It is Tuesday morning",
      day: "Tuesday",
    },
    {
      text: "It is Wednesday morning",
      day: "Wednesday",
    },
    {
      text: "It is Thursday morning",
      day: "Thursday",
    },
    {
      text: "It is Friday morning",
      day: "Friday",
    },
    {
      text: "It is Saturday morning",
      day: "Saturday",
    },
  ];

  return (
    <div className="App">
      {messages.map(
        (message) =>
          currentDay === message.day && (
            <div>
              <h1>{message.text}</h1>
              <h2>{message.day}</h2>
            </div>
          )
      )}
    </div>
  );
}

export default App;

Здесь мы вызываем useEffect каждый день, чтобы изменить текст. Затем мы перебираем сообщения и отображаем текст за текущий день.

Теперь, когда мы запускаем наш сервер, мы видим.

Теперь вы можете динамически отображать разные тексты в разные дни в вашем приложении для реагирования.

Вот репо здесь со всем, поставьте ему звезду и подпишитесь.

.Спасибо