fun*_*eah 2 jquery meteor reactjs
提前道歉,这可能不是一个正确的解决方案类型的问题,但我不知道如何将其分解为更简单的部分或其他问题.
我在弥补在线可用的更琐碎的反应样本/演示与如何"思考反应"更复杂的应用程序之间的差距方面遇到了一些麻烦.
我有一个预先存在的解决方案,用于使用Meteor和一堆jquery构建的东西.这有点hacky,如果我能弄清楚如何,我认为将是React重构的好人选.
它看起来像这样:

如果我首先将其分解为组件层次结构,我会得到如下内容:
现在,我的反应思维能力分崩离析.每个组件似乎与其他组件具有非常严重的相互依赖性.
标记看起来像是最好的作为自己的组件,但它们的状态更多地受到内部其他组件的控制.
你会如何通过这种复杂性的例子来"思考反应"?任何帮助或建议将不胜感激.
我读过你的例子,我不完全确定它是如何工作的,所以我只是试着回答你的问题并从你的示例应用程序中提取一些具体的例子.
现在,我的反应思维能力分崩离析.每个组件似乎与其他组件具有非常严重的相互依赖性.
因此,反应的基本概念是尽可能地保留东西作为道具,如果你有需要由多个组件共享的状态,你需要将状态抽象给它们之上的父(或祖父). .如果他们没有合适的父级来弥补这一差距,您可以创建另一个包含此状态的组件,并将它们都作为子级.如果你正在创建的树太大,这就是使用flux来解决其中一些问题的地方,但是我不会在这里讨论这个问题,因为使用React这样的事情可能更容易,并从那里学习它直到你体验痛点.
例如,如果绿松石动作/线程组件受到标记点击的影响,则需要父级保持其上方的状态.
标记看起来像是最好的作为自己的组件,但它们的状态更多地受到内部其他组件的控制.
它们应该是它们自己的组件,并且可能是文本块的子组件.文本组件将采用支柱,以允许它确定是否显示这些块.
一般建议
我认为通常最简单的尝试和建模的方法是从底部开始逐渐开始.从一切静态开始,一切都作为道具,当你开始需要交互时,你可以开始应用状态,并在构建组件并将子组件中的"状态"转换为道具时逐渐移动该状态.只有这样我才能开始明白你的国家需要在哪里.
一些伪代码
我写了一些伪Javascript代码来直观地了解我将如何开始构建应用程序的这一部分.它不会做任何事情,但希望它会帮助你想象我的意思.如果你跟着它,ParentWithState并通过渲染功能向孩子工作,Marker希望你会明白我的意思.
var Marker = React.createClass({
render: function() {
return (
<div className="marker" onClick={this.props.handleMarkerEvent}>
+
</div>
)
}
})
var TextBlock = React.createClass({
var markerData = this.props.markerData;
var marker = null;
//do some logic with markerData
if(markerData.show === true){
marker = <Marker handleMarkerEvent={this.props.handleMarkerEvent}>
}
render: function(){
return (
<div className="textBlock">
{this.text}
{marker}
</div>
)
}
});
var Actions = React.createClass({
render: function(){
<div className="actions">
//some code to display the actions
</div>
}
})
var ParentWithState = React.createClass({
getInitialState: function(){
return {
textBlockData: [
//textBlock data objects
],
//put all the data you need for the app here
}
},
handleMarkerEvent: function(){
//do some stuff when marker is clicked
//change state which will propagate down
},
render: function() {
var textBlocks = this.state.textBlockData.map(function(textBlock){
return (
<TextBlock text={textBlock.text} markerData={textBlock.markerData} markerEvent={this.handleMarkerEvent}>
)
})
return (
<div>
<div className="text-blocks">
{textBlocks}
</div>
<Actions />
</div>
)
}
});
Run Code Online (Sandbox Code Playgroud)
我在这里提到的最后一件事,因为Marker组件有一个影响其祖父母的状态的函数,我将在ParentWithState组件中创建事件处理程序,然后将其作为道具传递下来,然后最终在孩子中我将会使用onClick处理程序调用它,但实际上它是控制此函数的父级
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |