我有
var TestApp = React.createClass({
getComponent: function(){
console.log(this.props);
},
render: function(){
return(
<div>
<ul>
<li onClick={this.getComponent}>Component 1</li>
</ul>
</div>
);
}
});
React.renderComponent(<TestApp />, document.body);
我想为点击列表元素的背景着色 . 我怎么能在React中做到这一点?
就像是
$('li').on('click', function(){
$(this).css({'background-color': '#ccc'});
});
9 回答
您可以使用React.createClone方法 . 创建元素,而不是创建它的克隆 . 在克隆创建过程中,您可以注入道具 . 像这样注入一个onClick:方法道具
{ onClick : () => this.changeColor(originalElement, index) }
changeColor方法将使用副本设置状态,允许您在进程中设置颜色 .
为什么不呢:
如果你想更多关于它的反应,你可能想要将所选项目设置为其包含的React组件的状态,然后引用该状态以确定
render
中项目的颜色:当然,你想把那些
<li>
放入循环中,你需要让li.on
和li.off
样式设置你的background-color
.我能想到的两种方式是
这是我个人的最爱 .
这是DEMO
我希望这有帮助 .
以下是如何使用es6语法定义一个响应onClick事件处理程序,它正在回答问题 Headers
使用ECMA2015 . 箭头功能使“this”更加直观 .
如果你使用的是ES6,这里有一些简单的示例代码:
在ES6类主体中,函数不再需要'function'关键字,它们不需要用逗号分隔 . 如果您愿意,也可以使用=>语法 .
以下是动态创建元素的示例:
请注意,每个动态创建的元素都应具有唯一的引用“key” .
此外,如果您想将实际数据对象(而不是事件)传递到onClick函数中,则需要将其传递给bind . 例如:
新的onClick功能:
传入数据对象:
正如 React 文档中提到的,它们与事件处理方面的普通HTML非常相似,但是React中的事件名称使用了camelcase,因为它们不是真正的HTML,它们是JavaScript,你在我们传递函数调用时传递函数在HTML的字符串格式中,它们是不同的,但概念非常相似......
看下面的例子,注意事件传递给函数的方式:
请注意,如果你downvote . 这是一个非标准的(但并非罕见的)React模式,它不会产生Coffeescript .
执行此操作的“反应方式”将是组件自身的状态:
(
c = console.log.bind console
)这个例子有效 - 我在本地测试了它 . 您可以在my github查看此示例代码 . 最初env只是我自己的白板研发目的本地,但我把它发布到Github为此 . 可能会在某些时候写完,但您可以查看2016年9月8日的提交以查看此内容 .
更一般地说,如果你想看看React的CS / no-JSX模式是如何工作的,请查看最近的一些工作here . 我有可能有时间为这个app想法完全实现POC,其中包括NodeJS,Primus,Redis和React .