我可以帮助您进行翻译。以下是需要翻译的内容:
在这种特定情况下它是起作用的。但我想摆脱
我考虑创建mixin。然后,在
我的问题是:是否有办法遍历React构建的树?我注意到React Developer Tools(Chrome扩展程序)可以做到这一点。
类似问题:React.js组件创建父子关系并进行迭代。
我需要为一个HTML页面构建一个可视化编辑器。ReactJS似乎是一个不错的选择。目前,我遇到了以下问题:
我对我的数据进行了建模:
var Model = {
title: 'Hello',
description: 'Pellentesque eleifend urna ac purus tempus...',
date: new Date().toString()
};
构建一个组件,该组件将其数据存储在上述结构中:
var App = React.createClass({
getInitialState: function () {
return {
value: Model
}
},
handleMouseEnter: function (event) {
$(event.target).css('outline', '1px solid red').attr('contenteditable', true);
},
handleMouseLeave: function (event) {
var t = $(event.target), v = this.state.value;
t.css('outline', 'none').attr('contenteditable', false);
v[t.attr('property')] = t.text();
this.setState({value: v});
},
render: function () {
var v = this.state.value;
return (
<div>
<pre style={{whiteSpace: 'normal'}}>{JSON.stringify(this.state)}</pre>
<h1 onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} property="title">{v.title}</h1>
<p onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} property="description">{v.description}</p>
<p onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} property="date">{v.date}</p>
</div>
);
}
});
React.renderComponent(<App />, document.getElementById('app'));
在这种特定情况下它是起作用的。但我想摆脱
onMouseEnter
和onMouseLeave
属性,只保留property
字段。像这样:<pre style={{whiteSpace: 'normal'}}>{JSON.stringify(this.state)}</pre>
<h1 property="title">{v.title}</h1>
<p property="description">{v.description}</p>
<p property="date">{v.date}</p>
我考虑创建mixin。然后,在
componentDidMount
事件中,将处理程序附加到所有带有property
属性的元素。但是我没有找到实现这一点的方法。我的问题是:是否有办法遍历React构建的树?我注意到React Developer Tools(Chrome扩展程序)可以做到这一点。
类似问题:React.js组件创建父子关系并进行迭代。
children
属性即可。 在我的意见中,更好的方法是在componentDidMount
上使用mixin中的普通DOM方法,例如document.querySelectorAll('*[property]')
(非jQuery ex)。 不知道选择器是否正确。 - Hulvejh1.someClass:hover { outline: 1px solid red; }
?此外,我听说contentEditable
与React不兼容,你可能需要在继续之前阅读这里的内容https://dev59.com/VWEh5IYBdhLWcg3wNxEn#27255103。 - Andy