- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 React 新手,正在尝试掌握语法。
我正在 React 15 环境中进行开发(使用 React-starterify 模板),并且一直在使用下面版本 2 中的语法,但是,我在 Facebook 的 React 页面中找到的大多数示例和教程都是版本 1。两者之间的区别以及何时应该使用其中一种而不是另一种?
版本 1
var MyComponent = React.createClass({
render: function() {
return (
<ul>
// some list
</ul>
);
}
});
module.exports = MyOtherComponent;
版本 2
const MyComponent = () => (
<ul>
// some list
</ul>
);
export default MyComponent;
最佳答案
第二个代码是一个无状态功能组件,并且是一种新的语法/模式,用于将组件定义为 props
的函数。它是在 React v0.14 中引入的。
您可以在官方 React 博客 here 上阅读更多相关信息。 ,在官方 React 文档上,here .
<小时/>These components behave just like a React class with only a render method defined. Since no component instance is created for a functional component, any ref added to one will evaluate to null. Functional components do not have lifecycle methods, but you can set
.propTypes
and.defaultProps
as properties on the function.This pattern is designed to encourage the creation of these simple components that should comprise large portions of your apps. In the future, we’ll also be able to make performance optimizations specific to these components by avoiding unnecessary checks and memory allocations.
此模式与“传统”模式类似,不同之处在于您使用的是简单函数而不是类中定义的方法。当您想要从类中提取函数时(例如为了可读性和清洁性),这可能很有用。
需要注意的一件重要事情是,功能组件就是一个函数。这不是一个类(class)。因此,不存在全局 this
对象。这意味着当您进行渲染时,您基本上是在创建一个 ReactComponent 的新实例,从而排除了这些 javascript 对象相互通信的可能性通过一些全局this
。这也导致无法使用状态
和任何生命周期方法。
性能
当您使用无状态功能组件时,React 足够聪明,可以省略所有“传统”生命周期方法,这提供了相当多的优化。 React团队表示,他们计划在未来对内存分配进行进一步优化,减少检查次数。
适应性
因为我们只讨论函数(而不是类),所以我们不需要担心状态、生命周期方法或其他依赖项。给定参数,该函数将始终给出相同的输出。因此,我们可以很容易地在任何我们想要的地方调整这些组件,这也使得测试变得更加容易。
With React’s stateless functional components, each component can be easily tested in isolation. No mocking, state manipulation, special libraries, or tricky test harnesses are needed.
鼓励最佳实践
React 通常与 MVC 模式的 V 进行比较,因为它旨在创建 View 。创建组件的“传统”方法可以轻松地将业务逻辑(例如使用 state
或 ref
)“侵入”到实际上只应该处理渲染逻辑的组件中。他们鼓励懒惰和编写臭代码。然而,无状态功能组件使得几乎不可能采取这种捷径并强制采用更好的方法。
一般来说,建议尽可能使用新模式!如果您只需要 render
方法,但不需要生命周期方法或 state
,请使用此模式。当然,有时您确实需要使用状态
,在这种情况下,您可以使用传统模式。
Facebook 建议在渲染静态展示组件时使用无状态组件。然后,如果需要某种状态,只需将它们包装在有状态组件中,即可通过使用其状态并将 props
发送到无状态组件来管理它们。 p>
关于javascript - React.createClass 与 ES6 箭头函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37170809/
在 settings.py LANGUAGE_CODE = 'es-mx'或 LANGUAGE_CODE = 'es-ar'不起作用,但是 LANGUAGE_CODE = 'es'或 LANGUAGE
我想知道OpenGL ES 2.0和OpenGL ES 3.0之间有什么区别。 OpenGL ES 3.0的主要优点是什么? 最佳答案 总体而言,这些变化通过更大的缓冲区、更多的格式、更多的统一等提高
这是我为此端点使用 Postman localhost:9201/response_v2_862875ee3a88a6d09c95bdbda029ce2b/_search 的请求正文 { "_sour
OpenGL ES 2.0 没有 ES 1.0 那样的 GL_POINT_SMOOTH 定义。这意味着我用来绘制圆圈的代码不再有效: glEnable(GL_POINT_SMOOTH); glPoin
我尝试编译这个着色器: varying vec2 TexCoords; varying vec4 color; uniform sampler2D text; uniform vec3 textCol
我是 OpenGL ES 的新手,我使用的是 OpenGL ES 2.0 版本。我可以在片段着色器中使用按位操作(右移、左移)吗? 最佳答案 OpenGL ES 2.0 没有按位运算符。 ES 3.0
有没有办法只用线画一个三角形? 我认为GL_TRIANGLES选项可使三角形充满颜色。 最佳答案 使用glPolygonMode(face, model)设置填充模式: glPolygonMode(G
我想用一个包含 yuv 数据的采样器在 opengl es 着色器中将 yuv 转换为 rgb。我的代码如下: 1)我将 yuv 数据发送到纹理: GLES20.glTexImage2D(GLES20
我正在使用这样的域: http://www.domain.com/es/blabla.html 我想更改 .es 的/es 部分并将 URLS 转换为类似以下内容: http://www.domain
有谁知道OpenGL ES是否支持GL_TEXTURE_RECTANGLE?我计划将它用于 2D 图形以支持非二次幂图像。我当前的实现使用 alpha=0 填充的 POT 纹理,对于拉伸(stretc
我需要在具有 PowerVR SGX 硬件的 ARM 设备上实现离屏纹理渲染。 一切都完成了(使用了像素缓冲区和 OpenGL ES 2.0 API)。唯一 Unresolved 问题是速度很慢glR
这是一个奇怪的事情。我有一个片段着色器,据我所知只能返回黑色或红色,但它将像素渲染为白色。如果我删除一根特定的线,它会返回我期望的颜色。它适用于 WebGL,但不适用于 Raspberry Pi 上的
我正在考虑将一些 OpenGL 代码移植到 OpenGL ES 并且想知道这段代码到底做了什么: glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) 因为 g
我正在考虑将一些 OpenGL 代码移植到 OpenGL ES 并且想知道这段代码到底做了什么: glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) 因为 g
GLSL ES最多可以编译多少个程序?所以假设我创建了 100 个片段着色器,每个都有不同的效果。所以在运行时我编译所有这些并动态地我用 glUseProgram 交换它们。我假设每次我编译一个新的
我正在尝试使用顶点缓冲区对象来绘制圆,并在 iPhone 上的 OpenGL ES 2.0 中启用 GL_POINT_SMOOTH 来绘制点。 我使用以下 ES 1.0 渲染代码在 iPhone 4
为什么在 OpenGL ES 1.x 中缩放(均匀)对象会导致对象变轻? 更有意义的是它会更暗,因为法线被缩小是否也会使对象更暗?但由于某种原因,物体变轻了。当我放大时,对象变得更暗。在我看来,这应该
我正在尝试通过移植 some code 在 iOS 上的 OpenGL ES 2.0 中获得一些阴影效果。来自标准 GL。部分示例涉及将深度缓冲区复制到纹理: glBindTexture(GL_TEX
所以我正在使用 2D 骨骼动画系统。 有 X 个骨骼,每个骨骼至少有 1 个部分(一个四边形,两个三角形)。平均而言,我可能有 20 块骨头和 30 个部分。大多数骨骼都依赖于父骨骼,骨骼会每帧移动。
我在使用 ES 着色器时遇到了一些晦涩难懂的问题,而且我现在几乎没有想法了。 这是一些代码: .. precision mediump float; .. #define STEP (1f/6f) 5
我是一名优秀的程序员,十分优秀!