React Hooks 〜 使用 Effect Hook 的方式 〜

Effect Hook 是什么

这是用于控制渲染后的DOM更改、状态更新和对其他组件产生影响的处理(效果)的Hooks API。

基本的写法如下,在函数组件内引入和 useState 相似的函数,并进行编写。

import React, { useEffect } from "react"

// 関数コンポーネント内で下記を記述する
useEffect(() => {
  // 処理をここに書く

  // 【option】関数を返すようにすると、アンマウントされる前に関数が実行される。
  return () => console.log('クリーンアップを実行');
}, []);

Effect Hook 会在以下时间点执行。

    • レンダリング後に必ず実行する。

 

    • 初回のレンダリング後だけ実行する。

 

    • 指定したデータに変更があった場合のみ実行する。

例で示した文の[]のところに、何の変更をトリガーにするかを書くことができる。

作为优点,Effect Hook的函数内部可以使用React的功能,例如State等。

Effect 的使用情况

    • APIとの通信

State を設定して、レンダリング後に API からデータを取得してセットする。

Stateを変更させたときに、他に影響を与える場合

例えばチャットアプリで相手から返信が来た時に、タイトルに未読件数を表記するとか

样本

根据状态的变化,实现修改页面标题的 Effect Hook。我想象它类似于一篇文章发布网站。

import React, { useState, useCallback, useEffect } from "react";
import { InputForm } from "./InputForm";
import "./styles.css";

export default function App() {
  const [content, setContent] = useState<string>("test");

  const onChangeContent = useCallback(
    (event: React.ChangeEvent<HTMLInputElement>) => {
      setContent(event.target.value);
    },
    []
  );

  useEffect(() => {
    document.title = `${content} が入力されている。`;
    console.log("content が変更された");
  }, [content]);

  return (
    <div className="App">
      <InputForm content={content} onChange={onChangeContent} />
      <div>
        <span>content の値は、"{content}"</span>
      </div>
    </div>
  );
}
import React from "react"

interface Props {
  content: string;
  onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
}

export const InputForm = (props: Props) => {
  return <input defaultValue={props.content} onChange={props.onChange}></input>
}

这虽然很简单,但我在codesandbox上上传了一些示例代码。为了防止不必要的函数执行和DOM被无意中重写,我想最好还是尽量在第二个参数中放入一些东西。

其他

    • useEffect は1つのコンポーネント内で複数設定が可能

異なる変数を第二引数に設定するなどもできる

bannerAds