[英]ReactJS: How to get state value into container?
我需要根據搜索字符串值從數據庫獲取數據。 因此,我正在使用輸入字段。 搜索字符串存儲為狀態值。
組件的數據來自容器(使用npm meteor / react-meteor-data)。
現在的問題是,如何將搜索字符串放入容器中以設置發布參數?
容器/ example.js
export default createContainer((prop) => {
Meteor.subscribe('images', searchString) // How to get searchString?
return { files: Images.find({}).fetch() }
}, Example)
組件/ example.jsx
class Example extends Component {
constructor(props) {
super(props)
this.state = {
searchString: ''
}
}
searchImage(event) {
const searchString = event.target.value
this.setState({ searchString })
}
render() {
return (<Input onChange={ this.searchImage.bind(this) }/>)
}
}
export default Example
出版物
Meteor.publish('images', function(search) {
return Images.find({ title: search }).cursor
})
onChange={ (e)=> {this.setState({ searchString: $(e.target).val() }) } }
這就是我們為內部狀態屬性分配值的方式:)
編輯:我似乎已經誤解了這個問題...
也許您可以創建兩個不同的組件:父組件和子組件,並且可以使用createContainer HOC包裝子組件,如下所示:
childComponent.js
const Example = (props) => {
return <Input onChange={props.searchImage}/>
}
export default createContainer(({searchString}) => {
Meteor.subscribe('images', searchString)
return { files: Images.find({}).fetch() }
}, Example)
parentComponent.js
class ExampleWrapper extends Component {
constructor(props) {
super(props)
this.state = {
searchString: ''
}
}
searchImage = (event) => {
const searchString = event.target.value
this.setState({ searchString })
} // instead of binding this, you can also use arrow function that
// takes care of binding
render() {
return (<Example searchImage={this.searchImage} searchString={this.state.searchString} {...this.props} />)
}
}
export default ExampleWrapper
這個想法是,由於createContainer
是一個高階組件,因此它無權訪問由其包裝的任何組件的props。
我們需要做的是,從父組件傳遞searchString
的值。 方法如下: ExampleWrapper
的狀態為searchString
, Example
組件的searchString
為searchString
。 我們可以將searchString
prop的值設置為state.searchString
。 由於default export
對應於createContainer({..some logic…}, Example})
,因此createContainer
可以使用稱為searchString
的道具。
為了更改state.searchString
的值,我們還傳遞了searchImage
函數作為對Example
組件的支持。 每當發生更改事件時, onChange
觸發searchImage
函數,該函數將更新state.searchString
的值。 最終, state.searchString
的值更改的那一刻, searchString
的值更改,因此您的訂閱結果也更改
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.