- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近一直在玩 React 16.6.0
,我喜欢 React Memo 的想法,但我一直无法找到任何有关最适合实现它的场景的信息。
React 文档 ( https://reactjs.org/docs/react-api.html#reactmemo ) 似乎并没有暗示将它扔到所有功能组件上有任何影响。
因为它会进行浅层比较来确定是否需要重新渲染,所以是否会出现对性能产生负面影响的情况?
像这样的情况似乎是一个显而易见的实现选择:
// NameComponent.js
import React from "react";
const NameComponent = ({ name }) => <div>{name}</div>;
export default React.memo(NameComponent);
// CountComponent.js
import React from "react";
const CountComponent = ({ count }) => <div>{count}</div>;
export default CountComponent;
// App.js
import React from "react";
import NameComponent from "./NameComponent";
import CountComponent from "./CountComponent";
class App extends Component {
state = {
name: "Keith",
count: 0
};
handleClick = e => {
this.setState({ count: this.state.count + 1 });
};
render() {
return (
<div>
<NameComponent name={this.state.name} />
<CountComponent count={this.state.count} />
<button onClick={this.handleClick}>Add Count</button>
</div>
);
}
}
因为name
在这种情况下永远不会改变,所以内存是有意义的。
但是如果 props 频繁变化怎么办?
如果我添加另一个按钮来更改状态中的其他内容并触发重新渲染,那么将 CountComponent
包装在 memo 中是否有意义,即使该组件是按设计设计的是不是要经常更新?
我想我的主要问题是只要一切保持纯粹,是否存在不使用 React Memo 包装功能组件的情况?
最佳答案
React.memo
,因为比较组件返回的树总是比比较一对props
属性更昂贵所以不要听任何人的,将所有功能组件包装在 React.memo
中。 React.memo
原本是打算内置到功能组件的核心中,但由于失去了向后兼容性,默认情况下并未使用。 (因为它从表面上比较对象,并且您可能正在使用组件中子对象的嵌套属性)=)
就是这样,这是 React 不自动使用 memo 的唯一原因。 =)
事实上,他们可以制作版本 17.0.0,这会破坏向后兼容性,并使 React.memo
成为默认值,并制作某种函数来取消此行为,例如 React.deepProps
=)
别再听理论家的话了,伙计们=)规则很简单:
如果你的组件使用DEEP COMPARING PROPS,那么就不要使用memo,否则总是使用它,比较两个对象总是比调用React.createElement()
并比较两棵树、创建FiberNodes便宜,等等。
理论家谈论他们自己不知道的东西,他们没有分析过react代码,他们不理解FRP,他们不明白他们的建议=)
附注如果您的组件使用 children
属性,则 React.memo
将不起作用,因为 children
属性始终会创建一个新数组。但最好不要为此烦恼,即使这样的组件也应该包装在 React.memo
中,因为计算资源可以忽略不计。
关于javascript - 什么时候不应该使用 React 备忘录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53074551/
1、关于空值 提示: 在MySQL中如果不为NOT NULL字段赋值(等同于赋NULL值) 例如: 为一个NOT NULL的整型赋NULL值,结
我喜欢新的 scalaz Memo 功能,但发现它缺少两件事:1)它隐藏了我需要访问的底层 Map——至少是所有值的列表,以及 2)我想要一个使用 val 实现的版本我在某处读到的 scala.col
有人知道是否有类似 Memo/RichEdit 的东西吗?需求:对行进行编号,从流中加载大文件(超过 5 MB)。 最佳答案 Developer Express有一套广泛的 VCL 组件,其中包括一个
我最近一直在玩 React 16.6.0,我喜欢 React Memo 的想法,但我一直无法找到任何有关最适合实现它的场景的信息。 React 文档 ( https://reactjs.org/doc
我有一个包含很多表单字段的应用程序。我想要一种可以避免重新渲染的方法。我正在使用 Formik 来管理表单。 我正在使用 Formik 的 useField以 React.memo 访问我的子组件中的
前言 一直以来,ssh 身边都有很多小伙伴对 TS 如何在 React 中运用有很多困惑,他们开始慢慢讨厌 TS,觉得各种莫名其妙的问题降低了开发的效率。 其实如果运用熟练的话,TS 只是在
我必须将 .DBF 和 .FPT 文件从 Visual FoxPro 转换到 MySQL。现在我的脚本适用于 .DBF 文件,它使用 dbase_open() 和 dbase_get_record_w
我正在尝试将数据从 Act 2000 转换为 MySQL 数据库。我已经成功地将 DBF 文件导入到单独的 MySQL 表中。但是我遇到了 *.BLB 的问题文件,这似乎是一个非标准的备忘录文件。 D
我正在构建一个提供创建笔记功能的 Android 应用。 为此,我开始下一个 Activity : Intent notepad = new Intent(Intent.ACTION_MAIN); n
您好,我需要在备忘录中显示结果,而不是使用 System.out.println,但是无法将标准输出放入列表中,例如在 Swing 备忘录中显示此列表的内容之后,因为我需要实时或显示时显示结果的每一行
我是一名优秀的程序员,十分优秀!