Javascript React.js道具是否仅用于在组件之间传递数据?
我有一个拥有许多子组件的组件。在Javascript React.js道具是否仅用于在组件之间传递数据?,javascript,reactjs,Javascript,Reactjs,我有一个拥有许多子组件的组件。在render()。在这个循环中,我检查每个项目,看它是否是“特殊的一个”。如果是,则将其存储在变量中 之所以这样做,是因为componentDidMount定义了一个频繁引用的事件处理程序,它需要对特殊项进行引用(并且不希望重复遍历所有项) 在React中,将此引用存储在this.props.specialItem或this.specialItem中是否惯用 以下是psuedocode中的情况示例: var ItemList = React.createClass
render()。在这个循环中,我检查每个项目,看它是否是“特殊的一个”。如果是,则将其存储在变量中
之所以这样做,是因为componentDidMount
定义了一个频繁引用的事件处理程序,它需要对特殊项进行引用(并且不希望重复遍历所有项)
在React中,将此引用存储在this.props.specialItem
或this.specialItem
中是否惯用
以下是psuedocode中的情况示例:
var ItemList = React.createClass({
componentDidMount: function() {
$(document).keydown(function(e) {
if (e.which === 27) {
this.setState({ currentItem: this.specialItem });
return;
}
}.bind(this));
},
render: function() {
var items = _.map(this.state.data, function(item) {
if (!this.specialItem && this.isSpecial(item)) {
////////////////////////////////////////////////////
this.specialItem = item;
// or should this be this.props.specialItem ?
////////////////////////////////////////////////////
}
// ...
}.bind(this));
}
});
查看您的伪代码,我们知道一些事情:
this.state.data
是一个项目数组
this.isSpecial(item)
告诉我们某个项目是否是特殊的
- 按Esc键时,我们要将
状态.currentItem
设置为特殊项
这样,我们就可以从渲染函数中删除这个特殊的逻辑,并且只在我们的按键处理程序中使用它
componentDidMount: function(){
$(document).keydown(function(e) {
if (e.which === 27) {
var special = this.state.data.find(this.isSpecial);
this.setState({currentItem: special});
}
}.bind(this));
}
这确实依赖于,这是懒惰的(因此效率更高),我们只在用户按下Esc键时进行此检查。。。这可能比调用渲染函数的频率要低得多
如果用户经常点击此键,则将其存储在this.specialItem
的组件将接收道具中,性能可能会稍好一些
在React中,将此引用存储在this.props.specialItem或this.specialItem中是否惯用
千万不要用this.props.anything=something
设置道具
和往常一样,不要忘记删除组件中的事件处理程序WillUnmount
我同意将特殊项的查找理想地放在事件处理程序中,但在这种情况下,render
已经循环了所有项,this.isSpecial()
是一种非常便宜的查找,我希望用户点击事件处理程序的频率比psuedocode可能建议的要高:)无论如何,这都是很好的建议,您回答了我的问题。非常感谢你!