React 重新学习前端技术

React 文档再学习 7 使用 Effects 进行同步

2022-11-28  本文已影响0人  吴摩西

Effects 帮助开发者跟 React 外部沟通,例如同步状态给非 React 组件,跟服务器建立连接。或者当组件出现在页面时,发送一些日志。

在 React 组件中,包含两种代码:

Effect 可以让开发者在由于渲染本身触发,而不是用户特定行为触发的副作用。例如当一个聊天窗口出现在屏幕上时,连接到远端聊天服务器。Effect 会在渲染结束并且更新屏幕后执行。是跟外部系统(例如网络或者第三方组件库)同步的好时机。

不应该使用 useEffect 的地方

Effect 的生命周期

所有的 react 组件都有如下的生命周期

const serverUrl = 'https://localhost:1234';

function ChatRoom({ roomId }) {
  useEffect(() => {
    const connection = createConnection(serverUrl, roomId);
    connection.connect();
    return () => {
      connection.disconnect();
    };
  }, [roomId]);
  // ...
}

一般可以理解成,当组件 mount 时,react 开始与外部系统同步,当组件 unmount 时,react 停止与外部系统同步。
如果不指定 dependency array,effect 会在每次 render 后执行。

去除多余的 dependency

function ChatRoom({ roomId }) {
  const [messages, setMessages] = useState([]);
  useEffect(() => {
    const connection = createConnection();
    connection.connect();
    connection.on('message', (receivedMessage) => {
     // 下面的代码会产生额外的 dependency
     // setMessages([...messages, receivedMessage]);
      setMessages(msgs => [...msgs, receivedMessage]);
    });
    return () => connection.disconnect();
  }, [roomId]); // ✅ All dependencies declared
  // ...
上一篇下一篇

猜你喜欢

热点阅读