为子组件的每个实例传递两个不同的数据列表?
Passing two different lists of data for each instance of a child component?
我是 ReactJS 的新手,我正在使用 react-search npm 包:
https://www.npmjs.com/package/react-search
我有一个用于订购食物的页面。有两个 react-search 组件,一个对应你今天想收到的食物,另一个对应 'later'。因此,我将相同的食物列表传递给 reactSearch 的两个实例:
<label> Add for now: </label>
<ReactSearch list={foods} updateFoods={this.updateNowOrders}></ReactSearch>
<label> Add for later: </label>
<ReactSearch list={foods} updateFoods={this.updateLaterOrders}></ReactSearch>
ReactSearch代码如下:
import Search from 'react-search'
import ReactDOM from 'react-dom'
import React, { Component, PropTypes } from 'react'
export default class ReactSearch extends Component {
update(foods) {
this.props.updateNowOrders(foods);
this.props.updateLaterOrders(foods);
}
render () {
var foods = this.props.list;
return (
<div>
<Search foods={foods}
placeholder='Search foods'
maxSelected={}
multiple={true}
onItemsChanged={this.update.bind(this)} />
</div>
)
}
}
在这里,我试图将每个组件的新食品列表(selected 食品)传递回创建订单组件。
现在这里的第一个问题是我会得到一个 TyperError: this.props.updateNowOrders 不是一个函数,当我尝试 select 稍后的一些命令时.我很欣赏这是糟糕的设计。我试图通过 try & catch 块将它们分开,使用 e instanceof TypeError... 但这不起作用。
我得到的第二个 TypeError 是在订单组件中。当食物清单与需要订购的食物一起传回时......然后我得到 TypeError: Cannot set 属性 'selectedForNow' of undefined.
订单组件中两个函数的实现如下:
constructor(props, context) {
super(props, context);
this.state = {
foods: [],
selectedForNow: [],
selectedForLater: []
};
};
updateSelectedForNow(data) {
this.setState.selectedForNow = data;
}
updateSelectedForLater(data) {
this.setState.selectedForLater = data;
}
有什么想法吗?
提前致谢:)
打字错误:this.props.updateNowOrders
发生这种情况是因为您的 属性 不是 updateNowOrders
,而是 updateFoods
,您应该使用相同的名称,例如 updateOrders
:
<label> Add for now: </label>
<ReactSearch list={foods} updateOrders={this.updateNowOrders}></ReactSearch>
<label> Add for later: </label>
<ReactSearch list={foods} updateOrders={this.updateLaterOrders}></ReactSearch>
TypeError: 无法设置未定义的 属性 'selectedForNow'
您可以阅读 here 关于 setState 的内容。这是一种你应该像这样使用的方法:
updateSelectedForNow(data) {
this.setState({selectedForNow: data});
}
我是 ReactJS 的新手,我正在使用 react-search npm 包: https://www.npmjs.com/package/react-search
我有一个用于订购食物的页面。有两个 react-search 组件,一个对应你今天想收到的食物,另一个对应 'later'。因此,我将相同的食物列表传递给 reactSearch 的两个实例:
<label> Add for now: </label>
<ReactSearch list={foods} updateFoods={this.updateNowOrders}></ReactSearch>
<label> Add for later: </label>
<ReactSearch list={foods} updateFoods={this.updateLaterOrders}></ReactSearch>
ReactSearch代码如下:
import Search from 'react-search'
import ReactDOM from 'react-dom'
import React, { Component, PropTypes } from 'react'
export default class ReactSearch extends Component {
update(foods) {
this.props.updateNowOrders(foods);
this.props.updateLaterOrders(foods);
}
render () {
var foods = this.props.list;
return (
<div>
<Search foods={foods}
placeholder='Search foods'
maxSelected={}
multiple={true}
onItemsChanged={this.update.bind(this)} />
</div>
)
}
}
在这里,我试图将每个组件的新食品列表(selected 食品)传递回创建订单组件。
现在这里的第一个问题是我会得到一个 TyperError: this.props.updateNowOrders 不是一个函数,当我尝试 select 稍后的一些命令时.我很欣赏这是糟糕的设计。我试图通过 try & catch 块将它们分开,使用 e instanceof TypeError... 但这不起作用。
我得到的第二个 TypeError 是在订单组件中。当食物清单与需要订购的食物一起传回时......然后我得到 TypeError: Cannot set 属性 'selectedForNow' of undefined. 订单组件中两个函数的实现如下:
constructor(props, context) {
super(props, context);
this.state = {
foods: [],
selectedForNow: [],
selectedForLater: []
};
};
updateSelectedForNow(data) {
this.setState.selectedForNow = data;
}
updateSelectedForLater(data) {
this.setState.selectedForLater = data;
}
有什么想法吗?
提前致谢:)
打字错误:this.props.updateNowOrders
发生这种情况是因为您的 属性 不是 updateNowOrders
,而是 updateFoods
,您应该使用相同的名称,例如 updateOrders
:
<label> Add for now: </label>
<ReactSearch list={foods} updateOrders={this.updateNowOrders}></ReactSearch>
<label> Add for later: </label>
<ReactSearch list={foods} updateOrders={this.updateLaterOrders}></ReactSearch>
TypeError: 无法设置未定义的 属性 'selectedForNow'
您可以阅读 here 关于 setState 的内容。这是一种你应该像这样使用的方法:
updateSelectedForNow(data) {
this.setState({selectedForNow: data});
}