- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
简介:我对 React 有点困惑。我看过一些文章说 React 组件只是接收 props 并渲染到虚拟 DOM 的函数。然而,我看到的是它们是成熟的有状态怪物,我没有找到像函数一样对待它们的方法。
问题:为什么 React 组件的每次使用都包含在 React.createElement
中?为什么我不能改用 new MyComponent()
?当我在 DevTools 中执行时,它看起来非常相似。既然组件是使用 React.createClass
创建的,为什么还需要 React.createElement
?这对我来说似乎是多余的。
编辑:这看起来很相关:https://gist.github.com/sebmarkbage/ae327f2eda03bf165261
编辑 #2:这是相关的,但不是 React.Component vs React.createClass 的重复项,该问题询问有关创建类的问题。我不是在询问创建新的组件类,而是在询问创建该类的实例(元素)。
最佳答案
In React 0.12, we're making a core change to how React.createClass(...) and JSX works.
(...)
Currently
var Button = React.createClass(...)
does two things. It creates a class and a helper function to create ReactElements. It is essentially equivalent to this:class ButtonClass { }
function ButtonFactory(...args) { return
React.createElement(ButtonClass, ...args); }
module.exports = ButtonFactory; ```Then you access this in the consuming component by invoking the ButtonFactory.
var Button = require('Button');
class App { render() {
return Button({ prop: 'foo '}); // ReactElement
} }Conceptually this is the wrong model. The source component should not be responsible for the output of App.
There are a few problems with this:
- ES6 classes can't be directly exported, they need to be wrapped.
- There's no convenient way to access the actual class and it's confusing which one you're using.
- Static methods are wrapped in helpers that are not real function. As a convenience.
- Auto-mocking destroys the factory so there is no way to test the result of render without disabling mocking.
- Factories can be wrapped by other factories that returns something different than ReactElements. Making testing and optimizations impossible.
- Languages with specialized features for object management have to defer to React instead of using the built-in features.
关于javascript - `React.createElement(...)` 和 `new MyComponent()` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734046/
我覆盖了React.createElement,但是jsx的按钮好像没有调用React.createElement。 React.createElement 没有获取到 jsx 的值作为按钮。 最佳答
我支持一些旧版 JavaScript。 在 IE8 中这有效: var hi = forms[i].document.createElement('INPUT'); 在 IE 11 中,该代码会引发异
我需要在 html 代码中查找并替换一些 html 元素(我遵循了这个答案:Getting an element from PHP DOM and changing its value),为此我检索了
我是 JavaScript 中 createElement 属性的新手。我需要从 MySQL 查询创建一个下拉菜单。我从 MySQL 查询创建了一个 PHP 数组,如下所示: 然后我写了JavaSc
function ytplayer_render_playlist(){ for(var i=0;i', { src: "http://img.youtube.com/vi/" + y
我有一些代码在 main.js 文件中复制 Javascript 重复示例: Example 1 for (i = userVote; i function createElement(elemen
.dot{ width: 8px; height: 8px; border-radius: 4px;
这个问题在这里已经有了答案: jQuery DOM changes not appearing in view source (5 个答案) 关闭 8 年前。 我编写此脚本是为了了解如何使用 cre
函数 A() { this.myProp = document.createElement("div"); function B(id) { this.myProp.id = id;
我有以下代码: function JS_Utils_BuildModal () { var objModal = document.createElement(
我的 React 应用程序出现了一些问题。我正在实现功能 authUser,现在我收到如下错误: TypeError: Cannot read property 'createElement' of
为什么会 console.log(document.createElement("p").appendChild(document.createTextNode("some text"))); 返回
我正在尝试创建一个元素并向其附加一个子节点,但我的返回只是一个没有该元素的字符串。 我首先创建元素 const li = document.createElement('li'); 其次,我使用以下命
为什么这段代码不起作用?当我使用注释部分而不是表格时,它起作用了......使用table为什么不能工作? function addLine() {
是否有任何解决方案可以在纯 JavaScript 中构建使用 in div 的多个 div? jQuery 版本 for (var i = 1; i new divs') } http://jsf
CSS div.online:last-child { color:green; } div.offline:last-child { color:green; } JavaScipt
我为我的网站下载了一个 livesearch JavaScript 插件,它可以工作,但我需要帮助来稍微修改它。 代码如下: $.ajax({url: $('base').attr('href
这是我要创建的 HTML: Tiana is ... keen to go to the ... market. 如您所见,有一个 包含散文句子的元素,中间带有选择框。 使用 $('#id').h
我正在尝试使用 document.createElement('circle') 来处理 svgs 但 Chrome 会创建一个结束标记来圈出 错误的结果。如何创建没有结尾的元素? 最佳答案 你可能
我正在尝试用 javascript 创建这个 html block : name }}" type="checkbox" class="minimal"> text 我有: var che
我是一名优秀的程序员,十分优秀!