- 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/
我有一个 PSD 布局要开发,还有一些东西,比如“卡片”,我很好奇我是否可以在没有图像的情况下只使用 CSS3 边框来做到这一点。 http://i.imgur.com/NSZYPsh.png (这些
我想添加一个轻量级的导航栏来切换登录和注册。结果应如下所示: 箭头应指示当前所选页面。 最佳答案 引用这个question ,问题中的 UI 与您的相似,并且可以根据您的需要调整答案中使用的概念。 关
我想创建一个元组,它包含一个箭头和一个描述箭头的字符串。如果我使用函数(而不是箭头)这样做,则以下工作如预期: funTimes10 = (*10) describe10 = "times 10" t
var std_obj = { activeEffect : 'fade', name : 'Jane', displayMe() { const doSomeEffects =
我有一个使用TActionToolBar和TActionManager的工具栏。一个按钮具有子按钮,这些子按钮可通过单击按钮右侧的向下小箭头来使用。 “向下箭头”按钮的宽度非常薄,需要精确的鼠标控制。
我正在使用 Javascript 进行流网络可视化。顶点表示为圆圈,边表示为箭头。 这是我的 Edge 类: function Edge(u, v) { this.u = u; // start
这个问题已经有答案了: Show border triangle in navbar using CSS (3 个回答) 已关闭 7 年前。 我有一个列表菜单,其边框宽度为 1px ...100%。
有什么方法可以从 javafx 2.2 表列中的排序表列中删除排序指示符/箭头吗? 最佳答案 这可以通过 css 来完成 .table-view .arrow { -fx-background
在我的应用程序中,我使用了 googlemap。在那,我在一个特定的位置放置了一个物体(自行车或汽车)。然后我搬到了其他地方。现在,根据我当前的位置,我需要显示一个箭头(校园),即我放置汽车或自行车的
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
我一直在 goole 中搜索如何仅使用 css 创建箭头和框。我在这里找到了一个近乎完美的例子:- http://dabblet.com/gist/4639593 如何更改此代码,使箭头指向左而不是右
嗨,我正在为这个问题挠头。我想创建一个如图所示的 CSS 渐变箭头,并能够将红色部分的填充定义为百分比。红色 block 只是纯色。 从这里JFiddle示例 我在创建绿色箭头方面取得了一些进展,但三
我刚刚开始在 Android 中创建一些自定义 View ,但在圆外绘制位图(箭头)时遇到问题。 这是我的代码: Canvas osCanvas = new Canvas(windowFrame);
我正在尝试绘制一个具有渐变的左侧箭头。这是我正在使用的代码,但我不明白为什么它不起作用。 .left-arrow{ position: relative; &:after{ rig
是否可以使用 GD 在 PHP 中创建此图像?我知道我需要使用 GD 和 imagecreate、imagecolorallocate、imagedestroy 等...但我不知道如何做曲线 我需要用
我在我的区域 map 中有一个我正在使用的工具台 http://qtip2.com/ 我调用工具提示时的代码与这个问题中的相同Tooltip on map area tag jQuery(docume
我正在尝试在 Haskell 中学习 Arrows,所以我正在使用基于箭头的 HXT 库为 XML 编写一个简单的应用程序。 HXT wiki 和教程中的示例放弃了函数类型签名。但是,我非常喜欢类型,
我一直在使用 Haskell(特别是 Yampa)中的 Arrowized FRP 库,但我不太清楚如何进行“连续”切换。我的意思是信号通过信号函数(下面的 sf),它本身就是一个信号(如图像的上半部
我想要一个引用,清楚地说明 PHP 的箭头/方法调用运算符 (->) 在运算符绑定(bind)顺序方面的位置。 不幸的是,authoritative PHP manual page关于运算符优先级没有
如何隐藏 QScrollBar 箭头? 我需要隐藏在水平滚动条中。 我试图用 setStyleSheet 隐藏: setStyleSheet(" QScrollBar:left-arrow:horiz
我是一名优秀的程序员,十分优秀!