0
我是ReactJS的新手,但最近學到了很多東西。我創建了一個SearchBar React組件,所以我可以過濾我的數組。一旦我開始在輸入文本框中輸入一個值,當字符串匹配時,filteredObjects變小。這很好,它的工作。將子組件創建的過濾對象/數組顯示到父組件中
但是,我無法弄清楚,我的父組件如何重新渲染我過濾的新值?我想要在屏幕上呈現filteredObjects的值。
這是我的父組件
var CommentBox = React.createClass({
displayName: 'CommentBox',
getInitialState: function() {
return {
responseText: []
}
},
componentDidMount: function() {
var self = this;
fetch.get(url).then(function (response) {
self.setState({responseText: response.data.logs});
}).catch(function (error) {
console.log(error);
});
},
render: function() {
let msg = this.state.responseText.map((m, i) => <tr key={i}><td>{m.timestamp}</td>);
return (
<div>
<SearchBar logs={this.state.responseText} />
<table>
<tbody>
<tr>
<th>Timestamp</th>
</tr>
{msg}
</tbody>
</table>
</div>
);
}
});
搜索欄分量代碼是下面
var SearchBar = React.createClass({
getInitialState: function() {
return { findQuery: ''};
},
onUpdate: function(event) {
this.setState({findQuery: event.target.value});
var filteredObjects = this.props.logs.filter(function(obj) {
var matched = false;
Object.keys(obj).some(function(key) {
if (obj[key].indexOf(event.target.value) > -1) {
matched = true;
return true;
}
});
return matched;
});
},
render: function() {
var value = this.state.findQuery;
return <input type="text" placeholder="Search..." value={value} onChange={this.onUpdate} />;
}
});
OK,現在嘗試。 :) – devwannabe
只要注意到,如果它不起作用,您可能需要綁定傳遞的幫助函數,如下所示:'updateMatched = {this.updateMatched.bind(this)}'。讓我知道如果是這樣,我會更新答案。 – pohlman
它實際上是使用您編寫的早期代碼調用this.updateMatched。但是,它不會更新網頁,因爲msg是獲取更新的網頁。所以我不確定如何使用我們在updateMatched方法中匹配的新值更新{msg}。 – devwannabe