在useEffect完成之前反应钩子渲染组件

myTest532 myTest532

我的useEffect中有一个异步请求。我注意到该组件是在useEffect完成之前呈现的。

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

import './SearchWords.css';

const URL_REQUEST = 'http://myLink.com';

const SearchWords = (props) => {
    const { setState } = props;

    useEffect(async () => {
        const data = {
            sentence: props.sentence
        };
      
        await axios.post(`${URL_REQUEST}/getData`, { data })
            .then((res) => {
                setState(state =>({
                    ...state,
                    search: res.data
                }));
            })
            .catch((err) =>{
                console.log(err);
            })
    }, []);

    const render = () => {
        if(props.search.length > 0) {
            const linkMarkup = props.search.map((link) => (
                <li key={link.id} className="link-list-item">
                  <a
                    href={link.link}
                    target="_blank"
                    rel="noopener noreferrer"
                    className="link-list-item-url"
                    onClick
                  >
                    {link.name}
                  </a>
                </li>
            ));
            
            return <ul className="link-list">{linkMarkup}</ul>;
        } else {
            return <p>No data found for: {props.sentence}</p>
        }
    }

    return render()
}

export default SearchWords;

它正在工作,但首先显示No data found for: My Search String然后,它重新加载并显示<ul>结果。如何避免首先显示“未找到数据”消息。

谢谢

一定的表现

最简单的调整是根据响应是否返回来有条件地呈现JSX的该部分:

const [hasLoaded, setHasLoaded] = useState();
// ...
.then((res) => {
    setState(state =>({
        ...state,
        search: res.data
    }));
    setHasLoaded(true);
})

然后改变

return <p>No data found for: {props.sentence}</p>

return hasLoaded ? <p>No data found for: {props.sentence}</p> : <p>Loading...</p>;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 useEffect 钩子完成之前 ReactJS 认证路由组件渲染

来自分类Javascript

在渲染组件之前运行useEffect钩子

来自分类Dev

在API调用之前反应钩子组件渲染

来自分类Dev

反应:useEffect是否不能保证在组件渲染之前运行?

来自分类Dev

太多渲染反应钩子,useEffect,地图

来自分类Dev

在渲染反应钩子之前等待 API 数据

来自分类Dev

是否可以在 useEffect 钩子中渲染组件?

来自分类Dev

React:渲染的钩子比之前的渲染多?反应弹簧

来自分类Dev

React 挂钩子组件 useEffect 在父组件之前先执行

来自分类Dev

在渲染组件之前反应原型警告?

来自分类Dev

在获取数据之前完成渲染组件

来自分类Dev

组件未使用'useEffect'钩子在React中重新渲染

来自分类Dev

反应钩子。父组件不重新渲染以执行条件语句

来自分类Dev

反应钩子问题。不是重新渲染一个组件

来自分类Dev

反应useState钩子不触发子组件的重新渲染

来自分类Dev

在组件的初始渲染之前使用React钩子运行Mobx方法

来自分类Dev

React Hooks (Functional) Lifecycle:在 useEffect() 代码之前渲染的组件

来自分类Dev

打字稿动画完成后渲染反应组件

来自分类Dev

反应useEffect并返回渲染

来自分类Dev

多次反应useEffect渲染

来自分类Dev

反应、延迟渲染和钩子

来自分类Dev

使用 useEffect 存储响应以避免使用反应钩子重新渲染

来自分类Dev

反应-UseState不会在useEffect钩子内部获取后触发重新渲染

来自分类Dev

反应组件的渲染数组

来自分类Dev

反应不渲染组件

来自分类Dev

反应组件不渲染

来自分类Dev

React钩子形式useEffect不会通过调用另一个组件来重新渲染功能组件

来自分类Dev

使用两个 useEffect 反应钩子

来自分类Dev

警告“反应钩子 useEffect 缺少依赖项”

Related 相关文章

  1. 1

    在 useEffect 钩子完成之前 ReactJS 认证路由组件渲染

  2. 2

    在渲染组件之前运行useEffect钩子

  3. 3

    在API调用之前反应钩子组件渲染

  4. 4

    反应:useEffect是否不能保证在组件渲染之前运行?

  5. 5

    太多渲染反应钩子,useEffect,地图

  6. 6

    在渲染反应钩子之前等待 API 数据

  7. 7

    是否可以在 useEffect 钩子中渲染组件?

  8. 8

    React:渲染的钩子比之前的渲染多?反应弹簧

  9. 9

    React 挂钩子组件 useEffect 在父组件之前先执行

  10. 10

    在渲染组件之前反应原型警告?

  11. 11

    在获取数据之前完成渲染组件

  12. 12

    组件未使用'useEffect'钩子在React中重新渲染

  13. 13

    反应钩子。父组件不重新渲染以执行条件语句

  14. 14

    反应钩子问题。不是重新渲染一个组件

  15. 15

    反应useState钩子不触发子组件的重新渲染

  16. 16

    在组件的初始渲染之前使用React钩子运行Mobx方法

  17. 17

    React Hooks (Functional) Lifecycle:在 useEffect() 代码之前渲染的组件

  18. 18

    打字稿动画完成后渲染反应组件

  19. 19

    反应useEffect并返回渲染

  20. 20

    多次反应useEffect渲染

  21. 21

    反应、延迟渲染和钩子

  22. 22

    使用 useEffect 存储响应以避免使用反应钩子重新渲染

  23. 23

    反应-UseState不会在useEffect钩子内部获取后触发重新渲染

  24. 24

    反应组件的渲染数组

  25. 25

    反应不渲染组件

  26. 26

    反应组件不渲染

  27. 27

    React钩子形式useEffect不会通过调用另一个组件来重新渲染功能组件

  28. 28

    使用两个 useEffect 反应钩子

  29. 29

    警告“反应钩子 useEffect 缺少依赖项”

热门标签

归档