我正在使用React,MongoDB,Express和Node創建一個博客。我有三個組件:應用程序,列表和項目。該項目是博客文章;該列表是博客帖子的列表,並且該應用程序包括輸入文本並提交它的地方。我最終會添加更多功能,但是我想確定我是否遵守React的最佳實踐(我懷疑自己是否)。使用React更新狀態
所以在應用程序中,我getInitialState與職位(職位)數組和輸入(postbody)的文本字符串。我使用componentDidMount向我的數據庫發出AJAX GET請求,以便用戶可以看到所有帖子。
要處理輸入文本,我只是做了一個簡單的handleChange函數,它更新postbody的狀態。
我也有一個handleClick函數,它抓取this.state.postbody,然後POST數據庫。然而,相同的函數也會使數據庫的單獨GET請求更新posts數組的狀態。這看起來不正確!不應該以其他方式處理並自動更新? *這是我的主要問題。 *
另外,請讓我知道是否需要進一步拆分組件,或者如果我違反了使用React的最佳實踐(例如更改錯誤位置的狀態或錯誤地使用道具)。
var React = require('react');
var Item = React.createClass({
render: function() {
return (
<div>
<h2>{this.props.postbody}</h2>
</div>
)
}
})
var List = React.createClass({
render: function() {
return (
<div>
{this.props.array.map(function(post) {
return (
<Item postbody={post.postbody}></Item>
)
})}
</div>
)
}
})
var App = React.createClass({
getInitialState: function() {
return {
posts: [],
postbody: ''
}
},
componentDidMount: function() {
$.ajax({
type: 'GET',
url: '/api/blogPosts',
success: function(data) {
this.setState({posts: data});
}.bind(this)
})
},
handleClick: function() {
event.preventDefault();
var blogPost = this.state.postbody;
$.ajax({
type: 'POST',
url: '/api/blogPosts',
data: { postbody: blogPost }
});
$.ajax({
type: 'GET',
url: '/api/blogPosts',
success: function(data) {
this.setState({posts: data});
}.bind(this)
})
},
handleChange: function(event) {
this.setState({ postbody: event.target.value})
},
render: function() {
return (
<div>
<form action="/api/blogPosts" method="post">
<input onChange={this.handleChange} type="text" name="postbody"></input>
<button type="button" onClick={this.handleClick}>Submit</button>
</form>
<List array={this.state.posts} />
</div>
)
}
})
「反應最佳實踐」取決於您遵循的數據模式。你看過Flux還是Redux? – Tyrsius