【问题标题】:props in not passing value to Child Component in React在 React 中不向子组件传递值的道具
【发布时间】:2020-06-22 05:36:21
【问题描述】:

我正在开发一个简单的食物应用程序。 首先,它会在MenuComponent中显示dishDetails onClick 会将所选菜肴的 Id 传递给名为 getDish(dishdetail) 在这里,我想将 props 或 state 发送到我的 CartComponent,它将显示所选菜肴的详细信息。

问题一 道具没有传递给购物车(未定义的值) 但是如果我在 MenuComponent

中执行 console.log,则会显示 discdetail 名称、id

如何将道具/状态传递给购物车,请指导我。

//Here im binding my function

    class Menu extends Component {
  constructor(props) {
    super(props);
    this.getDish = this.getDish.bind(this);
  }




//This is my getDish function(in which i want to send props to Cart)
    getDish(dishDetail) {
        return (
          <React.Fragment>
            
            <Cart dishdetail={dishDetail}/>  **//undefined in Cart**
            {console.log({dishDetail.name})} **//it is working perfectly**
          </React.Fragment>
        );
      }

工作正常

从我发送数据的位置 onClick 函数

<button
    onClick={() => this.getDish(this.props.dishes[index])}
  ></button>

【问题讨论】:

  • 因为当您更改状态或重新渲染组件时,每个组件都有它的生命周期和生命周期运行,而在这里您没有这样做,所以您需要考虑通过状态设置您的菜式细节然后通过状态变量作为道具
  • 我这样做了。但是 setState 在我的情况下也不起作用
  • 请指导我完成代码。我该怎么做?
  • Cart 组件的外观如何?
  • 首先将你的代码移动到渲染函数中,我的意思是你通过getDish函数返回的代码,如果你想隐藏它,你可以应用一些条件,然后在getDish函数中为你的dishdetail设置状态并在您执行 setState 时通过 props 传递状态变量,它将自动运行渲染功能,因此您的子组件将被刷新

标签: reactjs undefined react-props setstate


【解决方案1】:

所有组件都应该通过 render 方法渲染。并且可以使用状态来控制行为。

// 类菜单

constructor(props) {
        super(props);
        this.state = {
            dishDetail: null
        };
        this.getDish = this.getDish.bind(this);
    }

    getDish(selectedDish) {
        this.setState({
            dishDetail: selectedDish
        });
    }

    render() {
        return (
            <>
                <button onClick={() => this.getDish(this.props.dishes[index]])}>Click Me</button>
                {/*Cart is called from render and value passed from state*/}
                <Cart dishdetail={this.state.dishDetail}/> 
            </>
        );
    }

您的购物车类将使用您的新数据重新呈现

class Cart extends React.Component {
    constructor(props) {
        super(props);

    }

    render() {
        console.log('cart', this.props);
        return (
          <div>You added {this.props.dishdetail} to cart</div>
        );
    }
}

【讨论】:

  • 如您上面提到的方法..将所有菜肴 ID 置于单一状态而不是选定的 Dish Id。请更准确地指导
  • 它在状态下采用单道菜id,在按钮点击时动态变化。另外,您是否有多个按钮可以添加到购物车(每道菜一个)?
  • 我正在向您发送完整的 MenuComponent,我想在其中获取特定的菜品 ID 并将其传递给 CartComponent(菜单的子组件),就像电子商务网站一样。我们将在哪里订购商品,它会出现在购物车上.我也做了一些更改我的代码。请指导我我在这个错误或错误上浪费了我的一周
猜你喜欢
  • 2016-08-17
  • 1970-01-01
  • 2020-12-19
  • 2020-05-01
  • 2019-02-20
  • 2020-04-13
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多