jQuery 和 React.js 表现不佳
jQuery and React.js aren't playing nice
错误:
_registerComponent(...): Target container is not a DOM element.
引起的行是 $('#container')
in main.jsx。当我用它代替 document.getElementById('container')
时,一切都很好。我究竟做错了什么? jQuery 不适合 React 吗?
index.jade
doctype html
html
head
script(src="lib/babel/browser.min.js")
script(src="lib/react/react.min.js")
script(src="lib/react/react-dom.min.js")
script(src="lib/jquery/dist/jquery.min.js")
body
#container
script(src="public/js/main.jsx", type="text/babel")
main.jsx
$(function(){
var Doug = React.createClass({
render: function(){
return (<h1>Hello world</h1>);
}
});
ReactDOM.render(
<Doug></Doug>,
$('#container')
);
});
$('#container')
是一个 jQuery 对象,不是 DOM 元素,试试 $('#container')[0]
如果你 运行 console.log($('#container'));
然后检查答案你会发现它 return 一个 DOM 对象与 运行ning document.getElementById('container');
确实如此。
将它们都记录下来,jquery 一个实际上 return 是 jquery fn 中的一个 jquery 对象。具有引用该 DOM 元素的数组的命名空间(即 n.fn.init[1]
)。 React 和 jquery 应该能够 运行 并排。我还没有测试过,但你可以尝试以下方式:
ReactDOM.render(<Doug></Doug>, $('#container').outerHTML());
但到那时,使用本机 js 方法定位渲染站点更有意义。
错误:
_registerComponent(...): Target container is not a DOM element.
引起的行是 $('#container')
in main.jsx。当我用它代替 document.getElementById('container')
时,一切都很好。我究竟做错了什么? jQuery 不适合 React 吗?
index.jade
doctype html
html
head
script(src="lib/babel/browser.min.js")
script(src="lib/react/react.min.js")
script(src="lib/react/react-dom.min.js")
script(src="lib/jquery/dist/jquery.min.js")
body
#container
script(src="public/js/main.jsx", type="text/babel")
main.jsx
$(function(){
var Doug = React.createClass({
render: function(){
return (<h1>Hello world</h1>);
}
});
ReactDOM.render(
<Doug></Doug>,
$('#container')
);
});
$('#container')
是一个 jQuery 对象,不是 DOM 元素,试试 $('#container')[0]
如果你 运行 console.log($('#container'));
然后检查答案你会发现它 return 一个 DOM 对象与 运行ning document.getElementById('container');
确实如此。
将它们都记录下来,jquery 一个实际上 return 是 jquery fn 中的一个 jquery 对象。具有引用该 DOM 元素的数组的命名空间(即 n.fn.init[1]
)。 React 和 jquery 应该能够 运行 并排。我还没有测试过,但你可以尝试以下方式:
ReactDOM.render(<Doug></Doug>, $('#container').outerHTML());
但到那时,使用本机 js 方法定位渲染站点更有意义。