Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.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
Reactjs React.js:是否可以在函数组件外部分配useState()?_Reactjs_React Hooks - Fatal编程技术网

Reactjs React.js:是否可以在函数组件外部分配useState()?

Reactjs React.js:是否可以在函数组件外部分配useState()?,reactjs,react-hooks,Reactjs,React Hooks,是否有任何语法允许在功能组件之外分配useState?到目前为止,我已经尝试过这个方法,但没有成功: import React, { useState, useEffect } from "react"; import ReactDOM from "react-dom"; function App() { useEffect(() => setStateData("from useEffect"), []); return <div className="App">

是否有任何语法允许在功能组件之外分配
useState
?到目前为止,我已经尝试过这个方法,但没有成功:

import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";

function App() {
  useEffect(() => setStateData("from useEffect"), []);

  return <div className="App">{stateData}</div>;
}

const [stateData, setStateData] = App.useState("default value"); // fails
// const [stateData, setStateData] = App.prototype.useState("default value"); // also fails

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

import React,{useState,useffect}来自“React”;
从“react dom”导入react dom;
函数App(){
useEffect(()=>setStateData(“来自useEffect”),[]);
返回{stateData};
}
const[stateData,setStateData]=App.useState(“默认值”);//失败
//const[stateData,setStateData]=App.prototype.useState(“默认值”);//也失败了
const rootElement=document.getElementById(“根”);
ReactDOM.render(

是否存在允许在函数组件之外分配useState的语法

如果你看一下

仅从React函数调用钩子 不要从常规JavaScript函数调用钩子。相反,您可以:

✅ 来自React函数组件的调用挂钩。
✅ 从定制钩子调用钩子(我们将在下一页了解它们)


因此…不,您不能在功能组件外部使用
useState

您可以通过将
useState
函数分配给变量,在组件外部使用
update
函数。只需确保在组件卸载时将其清除即可

/*保存更新功能的参考*/
让updateOutside
函数App(){
const[state,update]=useState()
useffect(()=>{
/*将更新分配给外部变量*/
updateOutside=update
/*组件卸载时取消分配*/
return()=>updateOutside=null
})
返回`App State:${State}`
}
如果(updateOutside)updateOutside(/*将重新呈现应用程序*/)

为什么要这样做?
useState
不应该这样做,也许你想做其他事情,不需要在功能组件之外使用
useState
就可以完成。主要是为了我自己理解React是如何工作的,但如果我喜欢分离的话,可能是为了代码组织。简短的回答,不,因为这不是React Hooks是如何工作的?从该页看,似乎是将useState()调用包装到另一个函数中(一个“自定义挂钩”)。这准确吗?@SeanDezoysa是的,它变成了自定义挂钩,但您只能在功能组件内调用自定义挂钩