函数定义执行顺序

来源:14-12 使用 Hooks 的两条重要规则

weibo_慕斯卡7563518

2021-08-30

useState里初始值通过一个函数计算拿到,这个函数如果在执行后面定义,会报错Cannot access '' before initialization;

useEffect中调某个函数,这个函数在useEffect后定义也可。

老师,这是为啥

写回答

2回答

双越

2021-08-31

我没这样用过,我查了好久的资料,也没见过其他人有这样用的。而且 React Hooks 的文档中也没这样写。

useState 的参数一般情况下就是一个常量或者字面量。无论原理是什么,还是不要用这些奇奇怪怪的用法。

另外,报错信息可以截图发给我,我再继续找找。

0
4
weibo_慕斯卡7563518
回复
双越
const arr = ["323", "32323", "3233", "发士大夫"]; export default function LabelSet() { const [Tags, setTags] = useState(arr); const [count, setCount] = useState(0); useEffect(() => { const aa = init(); setTags(aa); }, []); const isNumber = (item) => { if (!isNaN(parseInt(item))) { const preCount = count; setCount(preState => preState++); return true; } else { return false; } } const init = () => { return arr.filter(item => isNumber(item)); } return <>; } 这种算吗,以及count如果是常量而不是用useState声明的,且仅仅在isNumber中取值,这样算吗
2021-08-31
共4条回复

双越

2021-08-30

贴一下代码吧。光通过文字描述,我怕误会你的意思。

0
1
weibo_慕斯卡7563518
const arr = ["323", "32323", "3233", "发士大夫", "发士大夫士大夫", "323", "32323", "3233", "发士大夫", "发士大夫士大夫", "323", "32323", "3233", "发士大夫", "发士大夫士大夫", "323", "32323", "3233", "发士大夫", "发士大夫士大夫", , "发士大夫士大夫", "323", "32323", "3233", "发士大夫", "发士大夫士大夫"]; export default function LabelSet() { const [Tags, setTags] = useState(init()); // 报错 useEffect(() => { const aa = init(); // 不报错 setTags(aa); }, []); const init = () => { return arr.filter(item => !isNaN(parseInt(item))); } return <>; }
2021-08-30
共1条回复

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4664 学习 · 1644 问题

查看课程