繁体   English   中英

无状态组件内部的功能

[英]function inside stateless component

在某人之前,这个问题与此问题重复吗您能在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函数,这不是正确的方法,因此如果你想拥有这样的功能,总是建议编写类组件而不是函数组件,因为函数组件应该是纯粹的。

您可以编写嵌套函数,因为这是JavaScript的概念。 但是作为Reactjs,它只在道具或状态发生变化时重新渲染。 因此,如果您更新任何局部变量或this.something ,它将不会反映在UI上。 只有当父状态或道具发生变化时才能在UI上显示,并且有关此功能的React事件应该更新。

如果要根据变量更新UI,则应更新状态或道具。 因此,要么必须传递到props并处理父级中的状态,要么必须创建有状态组件。

你可能想要得到不同的东西,请分享你的情景。 我们可以根据情况找到合适的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM