【问题标题】:How is React/Redux functional if state is still being updated?如果状态仍在更新,React/Redux 的功能如何?
【发布时间】:2022-01-20 23:43:42
【问题描述】:

请原谅我问了一个可能很愚蠢的问题。

我的理解是 React 中的函数式组件是函数式的,因为它们返回一个视图,它们的状态不能直接改变,必须通过 setState() 函数来完成。它们没有任何直接改变的变量,至少在某种意义上我们不能像var = 'something'那样更新它们。

我的困惑是,即使我们使用这些函数设置状态,仍然完全有可能使逻辑依赖于以特定方式存在的状态。功能组件中的程序代码较少,但它仍然存在通过useEffects 在某些点修改此状态。所以即使我们是通过一个函数来做的,状态仍然会在某些时候发生变化。

我认为我对函数式编程的理解可能存在差距。目前在我的脑海中,似乎 FP 需要一个不会改变的程序最高级别的状态。但是大多数应用程序确实需要某种状态更改,如果不是在这个高应用程序级别,那么在本地组件级别,否则组件不会做任何事情。

我现在理解的是 FP = 状态变化很小,一切都是即时计算的,但顶部的状态保持不变

所以即使我们在 redux 之类的东西中有 reducer 等,我们最终仍然会改变状态?是的,有历史以这种方式改变状态,但除此之外还有什么好处?不是讽刺评论,我真的很困惑

我希望这是有道理的。我知道我错了,我只是不明白我怎么错了。如果有人可以帮助我,将不胜感激。

【问题讨论】:

    标签: javascript reactjs redux functional-programming react-functional-component


    【解决方案1】:

    也许这过于简单化了,但在这个阶段,函数组件只是被真正调用,因为它们被定义为函数(而不是类)。 Post react-hooks,它们与函数式编程几乎没有关系。函数式编程的纯函数没有状态或副作用:每次使用相同的参数运行它时,它都会返回相同的输出,并且不会影响任何外部状态。 React 函数式组件并非如此——或者至少它们不必如此。如果您使用的是 useEffect、useState 等,那么您并不是在进行函数式编程:您只是在编写一个恰好被定义为函数的 react 组件。

    此外,必须使用 setState(或 useState 返回的函数)来管理状态与函数式编程无关:任何类型的内部状态管理都已经是反函数式的,但是你的原因需要使用这些函数来修改 React 中的状态(在类和函数式组件中),这样 React 才能跟踪何时进行了状态更改并将组件排队以进行重新渲染。

    【讨论】:

    • 很好的答案,谢谢。这很有意义。我想如果我们要编写纯函数式组件,它们实际上不会做任何事情。只显示数据。我并不完全清楚纯 FP 如何实际用于制作 Web 应用程序,因为我们通常需要更改某种状态。但可以肯定的是,与类组件相比,React 的 FC 更具声明性,根据我的经验,类组件似乎更不易出错且更易于管理
    猜你喜欢
    • 2019-08-09
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2021-10-07
    • 2022-12-21
    相关资源
    最近更新 更多