javascript - 无状态组件内部的函数
问题描述
在有人作为这个问题的重复之前 你能在 JavaScript 中编写嵌套函数吗?
我想知道我们是否可以做这样的事情?
const toolbar = (props) => {
let sidedrawer = false;
showSideDrawer = () => {
sidedrawer = !sidedrawer
}
return (
<header className={Classes.Toolbar} purchasingHandlerClose={this.showSideDrawer}>
//Something here
</header>
)
}
export default toolbar;
更准确地说,在功能组件中是这样的
showSideDrawer = () => {
sidedrawer = !sidedrawer
}
然后像这样调用它
<header className={Classes.Toolbar} purchasingHandlerClose={this.showSideDrawer}>
现在,我知道我们可以做这个有状态的组件或类,但是在 JS 中,Class 只是语法糖(仍在试图弄清楚短语的含义),那么我们如何在无状态或函数式组件中实现这样的东西呢?
解决方案
您可以在无状态功能组件中编写函数,但是函数组件没有this
变量,为了调用该函数,您只需编写
const toolbar = (props) => {
let sidedrawer = false;
const showSideDrawer = () => {
sidedrawer = !sidedrawer
}
return (
<header className={Classes.Toolbar} purchasingHandlerClose={showSideDrawer}>
//Something here
</header>
)
}
export default toolbar;
然而,上面的一个缺陷是每次工具栏组件被渲染时,sidedrawer 都会被初始化为 false,因此 showSideDrawer 不能按预期工作。但是,您可以将 sidedrawer 变量移到功能范围之外,它会起作用
let sidedrawer = false;
const toolbar = (props) => {
const showSideDrawer = () => {
sidedrawer = !sidedrawer
}
return (
<header className={Classes.Toolbar} purchasingHandlerClose={showSideDrawer}>
//Something here
</header>
)
}
export default toolbar;
但是在这种情况下,showSideDrawer
每次工具栏渲染时也会创建该功能,这不是正确的方法,因此如果您想要拥有这样的功能,总是建议编写类组件而不是功能组件,因为功能组件应该是纯的。.
推荐阅读
- python - 如何在 python 中读取 csv 波斯文件?
- node.js - 使用 Forever 将我所有的错误和警告日志分别存储在各自的文件夹中?
- javascript - 在 Vue.JS 中使用 reverse() 反转 JSON 数据
- angular - 角度和单选按钮 - 根据选择隐藏 div 并将值输出到其他组件
- python - rasa核心安装找到现有包
- python-2.7 - UnicodeDecodeError: 'ascii' 编解码器无法在位置编码字符 u'\xe4'
- java - Realm Java 等价于 ANY 和 ALL NSPredicate 聚合运算符
- delphi - Delphi firemonkey - 包含对另一个对象的引用的组件 - 创建对象实例
- android - 导航架构组件 - 活动
- nlog - 添加多个异步文件目标时,nLog 4.4.11 中的线程死锁问题