【问题标题】:Passing two different lists of data for each instance of a child component?为子组件的每个实例传递两个不同的数据列表?
【发布时间】:2017-03-11 04:26:43
【问题描述】:

我是 ReactJS 的新手,我正在使用 react-search npm 包: https://www.npmjs.com/package/react-search

我有一个用于订购食物的页面。有两个反应搜索组件,一个对应于您今天想收到的食物,另一个对应于“稍后”。因此,我将相同的食物列表传递给 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>
        )
    }
}

在这里,我尝试将每个组件的新食物列表(选定的食物)传递回创建订单组件。

现在这里的第一个问题是,当我尝试为以后选择一些订单时,我会得到一个 TyperError: this.props.updateNowOrders is not a function。我很欣赏这是糟糕的设计。我试图通过 try & catch 块将你们两个分开,使用 e instanceof TypeError ... 但这不起作用。

我得到的第二个 TypeError 在 order 组件中。当食物列表与需要订购的食物一起传回时......然后我得到 TypeError: Cannot set property 'selectedForNow' of undefined. 两个函数在order组件中的实现如下:

constructor(props, context) {
    super(props, context);

    this.state = {
        foods: [],
        selectedForNow: [],
        selectedForLater: []
    };

};

updateSelectedForNow(data) {         
    this.setState.selectedForNow = data;
}

updateSelectedForLater(data) {     
    this.setState.selectedForLater = data;    
}

有什么想法吗?

提前谢谢:)

【问题讨论】:

    标签: javascript reactjs redux flux


    【解决方案1】:

    TyperError: 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});
    }
    

    【讨论】:

    • 感谢您的回复。我很傻,忘记了这种格式:D 然而,我得到了另一个 TypeError: this.setState is not a function。当尝试 this.state.setState({selectedForNow: data});我得到 TypeError: Cannot read property 'setState' of undefined。有任何想法吗?谢谢。
    • 啊,我需要在构造函数中添加 this.updateSelectedForNow = this.updateSelectedForNow.bind(this) 等。现在一切正常。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多