Синтаксис JavaScript для React - необязательные цепочки

RedDeveloper
13.03.2023 12:27
Синтаксис JavaScript для React - необязательные цепочки

Общий синтаксис JavaScript для React - необязательные цепочки

Видео введение

Версия персонального сайта

JavaScript

Если мы не знаем, являются ли данные, которые мы получаем, объектом, и вызываем его со значением объекта, и не делаем никаких выводов, программа сообщит об ошибке.

let food = null;

console.info(food.name); // error : Cannot read properties of null (reading 'name')

Поэтому, чтобы определить, имеет ли объект нужный нам ключ, можно использовать следующие методы.

let food = { name: "apple" };

if (food != null) {
  console.info(food.name); // output : apple
}

// or

if (food) {
  console.info(food.name); // output : apple
}

Или использовать опциональную цепочку, чтобы проверить, есть ли у объекта ключ, который мы хотим получить.

let food = { name: "apple" };

if (food?.name) {
  console.info(food.name); // output : apple
}

//不會進到這個if 因為food物件內並沒有名為color的key
if (food?.color) {
  console.info(food.color);
}
Необязательная цепочка выполняется путем добавления к имени объекта символа ? name используется для проверки, есть ли у объекта food ключ с таким именем.

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

let food = {
  name: "apple",
  color: "red",
  getFoodData: () => {
    console.info("getFoodData..."); // output : getFoodData...
  },
};

food?.getFoodData?.();

React

Теперь используйте API fetch для выборки постов, предоставленных jsonplaceholder, и установите ограничение на 5, чтобы за одну выборку мы получали только 5 постов.

function App() {
  const [posts, setPosts] = useState(null);

  useEffect(() => {
    const getPostData = async () => {
      const response = await fetch(
        "https://jsonplaceholder.typicode.com/posts?_limit=5"
      );
      const data = await response.json();
      setPosts(data);
    };

    getPostData();
  }, []);

  console.info(posts); // output : (5) [{…}, {…}, {…}, {…}, {…}]

  return (
    <div className = "App">
      {posts.map((post) => (
        <p>{post.title}</p>
      ))}
    </div>
  );
}

Это происходит потому, что состояние posts инициализируется в null, а состояние null не поддерживает функцию map, отсюда и сообщение об ошибке.

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

function App() {
  const [posts, setPosts] = useState(null);

  useEffect(() => {
    const getPostData = async () => {
      const response = await fetch(
        "https://jsonplaceholder.typicode.com/posts?_limit=5"
      );
      const data = await response.json();
      setPosts(data);
    };

    getPostData();
  }, []);

  console.info(posts);

  if (posts == null) {
    return <h1>Loading...</h1>;
  }

  return (
    <div className = "App">
      {posts.map((post) => (
        <p>{post.title}</p>
      ))}
    </div>
  );
}

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

function App() {
  const [posts, setPosts] = useState(null);

  useEffect(() => {
    const getPostData = async () => {
      const response = await fetch(
        "https://jsonplaceholder.typicode.com/posts?_limit=5"
      );
      const data = await response.json();
      setPosts(data);
    };

    getPostData();
  }, []);

  console.info(posts); // output : (5) [{…}, {…}, {…}, {…}, {…}]

  return (
    <div className = "App">
      {posts?.map((post) => (
        <p>{post.title}</p>
      ))}
    </div>
  );
}
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы

19.03.2023 13:43

Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем запускать наши php-файлы через localhost на наших компьютерах. Мне с трудом удалось установить его и я решил поделиться этой статьей, чтобы помочь тем,...

Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах

19.03.2023 13:03

При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после поставщика контекста. Это позволит избежать ненужных повторных рендеров.

Библиотека для работы с мороженым
Библиотека для работы с мороженым

19.03.2023 11:50

Лично я попрощался с операторами print() в python. Без шуток.

Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp

19.03.2023 06:15

Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они постоянно обновляют версию (а нам нужно быстро наверстать упущенное!).

Уроки CSS 6
Уроки CSS 6

18.03.2023 11:32

Здравствуйте дорогие читатели, я Ферди Сефа Дюзгюн, сегодня мы продолжим с вами уроки css. Сегодня мы снова продолжим с так называемых классов.

Что такое Css? Для чего он используется?
Что такое Css? Для чего он используется?

18.03.2023 11:16

CSS, или "Каскадные таблицы стилей", - это язык стилей, используемый в веб-страницах. CSS является одним из основных инструментов веб-разработки наряду с HTML и JavaScript.