Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React.js的功能组件中首次呈现之前调用api_Javascript_Reactjs_React Hooks_React Functional Component_React Lifecycle - Fatal编程技术网

Javascript 在React.js的功能组件中首次呈现之前调用api

Javascript 在React.js的功能组件中首次呈现之前调用api,javascript,reactjs,react-hooks,react-functional-component,react-lifecycle,Javascript,Reactjs,React Hooks,React Functional Component,React Lifecycle,如果我想在第一次呈现组件后调用API,我知道我们有useffecthook来调用API方法。(我说的只是功能组件,没有类组件) 有没有办法,我可以在我的组件第一次呈现之前调用API 这个问题的原因是,如果某个UI部分依赖于API,我也不想在第一次渲染时向用户显示任何不完整的信息,一旦我从API获取数据,这些信息将被更改。 这似乎是一个糟糕的UI体验 编辑:我得到了一些建议,可以使用useLayoutEffect或任何耗材标志来检查它是否被渲染。我已经检查过useLayoutEffect不起作用,

如果我想在第一次呈现组件后调用API,我知道我们有
useffect
hook来调用API方法。(我说的只是功能组件,没有类组件)

有没有办法,我可以在我的组件第一次呈现之前调用API

这个问题的原因是,如果某个UI部分依赖于API,我也不想在第一次渲染时向用户显示任何不完整的信息,一旦我从API获取数据,这些信息将被更改。 这似乎是一个糟糕的UI体验

编辑:我得到了一些建议,可以使用useLayoutEffect或任何耗材标志来检查它是否被渲染。我已经检查过useLayoutEffect不起作用,通过使用耗材标志,我们只是增加了复杂性

我们有更好的方法吗?

我认为可以通过传入一个空数组作为第二个参数来用于类似的事情<代码>使用布局效果(()=>{…},[])


在浏览器有机会绘制之前,useLayoutEffect中计划的更新将同步刷新


尽管您始终可以在父组件中获取数据并将其作为道具传递。或者,如果您不介意它现在只是一个实验性的功能,那么它正试图解决这个确切的问题。

在从同一组件呈现组件之前,没有正确的方法进行API调用

当且仅当具有可消耗数据时,您可能会首选在父组件和呈现呈现组件中进行API调用


这种情况下的另一个解决方法是在组件内保留
耗材
标志,在
useffect
内发出请求,不渲染任何内容或某种类型的加载程序,仅在请求成功完成时才渲染内容。

“在浏览器有机会绘制之前”,但不在组件之前rendered@Kyr没错,我编辑了我的答案以提供替代方案methods@Nimishgoel你说得对。但是,没有内置的钩子。甚至
componentWillMount
也不推荐使用。您可以编写如下自定义钩子:,或使用两个备选钩子之一options@Kyr组件渲染意味着什么?我以为这是渲染时,它是光栅化的GPU和画在屏幕上screen@duhaime,我认为react上下文中的“render”可以被视为从虚拟DOM的组件(render函数)更新部分返回,正确吗?由于渲染之前和渲染之后相隔毫秒,那么您认为渲染之前和渲染之后会有什么不同?在这两种情况下,都必须渲染某些内容(如加载)。