reactjs - 如何在另一个副作用呈现 react 组件后执行副作用

标签 reactjs use-effect

我有以下简单的用例: 组件 ServerRendered 用于呈现使用属性 url 从服务器检索的标记。在 ServerRendered 中,我使用 useEffect 从后端加载标记,将状态设置为当前标记并将其渲染在 div 中。 属性 init 可以选择指定渲染标记后应执行的函数。 渲染标记后如何运行 init 函数?

/* eslint-disable react/no-danger */

import React, {useState, useEffect} from 'react';
import axios from 'axios';

type ServerRenderedPropsType = {
    url: string,
    init?: () => void,
};

function ServerRendered(props: ServerRenderedPropsType) {
    const [html, setHtml] = useState('');
    useEffect(() => {
        async function fetchData() {
            const result = await axios(props.url);
            setHtml(result.data.title);
        }
        fetchData();
    }, [props.url]);

    return <div dangerouslySetInnerHTML={{__html: html}} className="serverRendered" />;
}

export default ServerRendered;

最佳答案

当您收到数据时,您只需执行其他操作

import React, {useState, useEffect, useCallback} from 'react';
import axios from 'axios';

type ServerRenderedPropsType = {
    url: string,
    init?: () => void,
};

function ServerRendered(props: ServerRenderedPropsType) {
    const [html, setHtml] = useState('');
    const fetchData = useCallback(async () => {
        const result = await axios(props.url);
        setHtml(result.data.title);
      }, [props.url])

    useEffect(() => {
        fetchData();
    }, [fetchData]);

    useEffect(() => {
      // do what you want here
      if (!html) return;
      props.init()
    }, [html])

    return <div dangerouslySetInnerHTML={{__html: html}} className="serverRendered" />;
}

export default ServerRendered;

关于reactjs - 如何在另一个副作用呈现 react 组件后执行副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58888374/

相关文章:

javascript - React <select> 自动改变不触发onChange

reactjs - React useEffect从api获取时无限循环

ios - 如何在已安装 PWA 的情况下更新

reactjs - 我的 react 组件工作正常,但 Jest 测试失败

javascript - 如何在 reactjs 解决方案中集成 Youtube Iframe api

reactjs - 使用 React Redux 显示 Snackbar

reactjs - React hooks useEffect : include some dependencies but ignore others

reactjs - 如何在 useEffect Hook 中形成 setFieldValue

reactjs - React props 加载速度不够快

reactjs - 如何使用 Reactstrap 在 DropdownItem 中添加链接?