雖然嘗試ReactJs,我對着下面的設計問題:ReactJs,產生事件reactjs應用程序之外
下面就是我試圖模擬一個聊天應用一個簡單的HTML,我目前正在建設的名單在線成員並試圖找出將新成員添加到列表中的代碼。
下面的React應用程序由它們的DOM層次結構中的以下類組成。
ChatApp>會員>會員
在反應類ChatApp,我可以用setInterval來更新成員收集並生成一個新成員新的DOM,但現在我想從外面的嘗試同樣的ChatApp類。
因此,我添加了一個按鈕「添加成員」,並希望調用它的點擊功能,然後將新成員添加到列表中。
但是,我應該如何從反應應用程序的外部獲取反應ChatApp及其setState方法的實例?
<html>
<head>
<style>
.onlineList{
width:300px;
height:500px;
display:inline-block;
overflow:auto;
border:1px solid lightgray;
}
.onlineList a{
display:inline-block;
width:100%;
padding:10px;
box-sizing:border-box;
text-decoration:none;
color:gray;
font-weight:bold;
border-top:1px solid lightgray;
border-bottom:1px solid lightgray;
}
.onlineList a:hover{
color:black;
background-color:lightgray;
}
</style>
<script src="js/jquery-1.11.3.min.js"></script>
<script src="js/react-with-addons.js"></script>
<script src="js/JSXTransformer.js"></script>
<script>
function addNewMember(){
// How can the setState in chatApp react class be called from here?
}
</script>
</head>
<body>
<button onClick="addNewMember()">Add New Member</button>
<div id="chatApp"></div>
<script type="text/jsx">
var Member = React.createClass({
render: function() {
return <a href='#'>{this.props.memberInfo}</a>;
}
});
var MemberList = React.createClass({
render: function(){
var membersDOM = [];
for(var m=0; m < this.props.members.length;m++){
membersDOM.push(<Member memberInfo={this.props.members[m].name}/>);
}
return (
<div id='onlineList' className={'onlineList'}>{membersDOM}</div>
)
}
});
var ChatApp = React.createClass({
getInitialState: function(){
var members = {
members: []
};
for(var m=0;m<1;m++){
members.members.push({name: m + 1});
};
/* setInterval(function(){
members.members.push({name: members.members.length + 1 });
this.setState(members);
}.bind(this),2000);
*/
return members;
},
render: function(){
return (
<div id='container'>
<MemberList members={this.state.members}/>
</div>
)
}
})
React.render(
<ChatApp/>,
document.getElementById('chatApp')
);
</script>
</body>
</html>
如果您使用React,您應該也可以使用Flux應用程序架構,它被設計爲與React的反應式渲染一起工作。查看https://facebook.github.io/flux/docs/overview.html。基本上,你會根據商店的數據來渲染你的組件。當添加成員被點擊時,您分派一個動作來更新商店,然後更新反應組件。 – Hans
@Hans,哦,好吧,我會看看那個。 – codin