当前位置: 首页 > 知识库问答 >
问题:

转发状态与将道具转发到子组件

越英范
2023-03-14

我无法将状态从父组件转发到子组件,这两个组件是类组件。将状态从父组件转发到子组件时,我希望在子组件中使用状态showModal变量作为状态变量show as:

 this.state = {
     show: this.props.show
 }

这个变量被用来激活模态。当我将其用作this.props.show时,状态已被转发到子组件并进行更新,但当我在子组件中this.state中使用道具时,状态尚未更新。有人知道问题出在哪里吗?

第一父组件:

    import React, { Component } from 'react';
    import Modal from './UI/Modal';

    class EnteredBooks extends Component {
        constructor(props) {
            super(props)

            this.state = {
                enteredBook: this.props.enteredBook,
                showModal: false
            }
        }

        detailsHandler = () => {
            this.setState({
                showModal: true
            })
        }

        render() {
            let show =  this.state.showModal;
            return (
                <div>
                     <div className="product">
                         <img src="{this.props.enteredWatch.bookUrl}" />
                         <p>{this.props.enteredWatch.bookType}</p>
                         <p>euro{this.props.enteredWatch.bookPrice}</p>
                         <button 
                             className="details-button"
                             onClick={this.detailsHandler}
                                >
                                    Details
                         </button>
                         <Modal show={this.state.showModal} watch={this.state.enteredWatch} />
                         <button className="buy-button">Buy</button>
                      </div>
                </div>
            );
        }
    }

export default EnteredWatches;

第二子组件:

import React, {Component} from 'react';
import classes from './Modal.css';

class Modal extends React.Component {
constructor(props) {
    super(props)

        this.state = {
            book: this.props.book,
            show: this.props.show
        }
    }
return(
        <div>
             <div className="Modal"
                    style={{
                        transform: this.state.show ? 'translateY(0)' : 'translateY(-100vh)',
                        opacity: this.state.show ? '1':'0'
                    }}>

                    <img src={this.state.book.bookUrl} />
                    <p>{this.state.book.bookType}</p>
                    <p>{this.state.book.watchUrl}</p>
                    <button className="details-button">Details</button>
                    <button className="buy-button">Buy</b
                </div>
            </div>
        );
    }
}


export default Modal;

共有2个答案

景国兴
2023-03-14

我编辑了你代码的某些部分。我不确定你是否在问这个问题,但希望它能启发你解决问题。

第一父组件:

import React, {
  Component
} from 'react';
import Modal from './UI/Modal';

class EnteredBooks extends Component {
  constructor(props) {
    super(props)

    this.state = {
      enteredBook:"",
      showModal: false
    }
  }

  detailsHandler = () => {
    this.setState({
      showModal: true
      enteredBook: this.props.enteredBook
    })
  }

  render() {
    let show = this.state.showModal;
    return ( <
      div >
      <
      div className = "product" >
      <
      img src = "{this.props.enteredWatch.bookUrl}" / >
      <
      p > {
        this.props.enteredWatch.bookType
      } < /p> <
      p > euro {
        this.props.enteredWatch.bookPrice
      } < /p> <
      button className = "details-button"
      onClick = {
        this.detailsHandler
      } >
      Details <
      /button> <
      Modal show = {
        this.state.showModal
      }
      watch = {
        this.state.enteredWatch
      }
      /> <
      button className = "buy-button" > Buy < /button> <
      /div> <
      /div>
    );
  }
}

export default EnteredWatches;
html prettyprint-override"><script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
阳勇
2023-03-14

constructor只运行一次。它适用于计算初始状态。但是这个例子就是getDerivedStateFromPropshook的用途。它允许在每次更新组件时从props计算状态,包括初始化:

static getDerivedStateFromProps(props) {
  return {
        book: props.book,
        show: props.show
  };
}
 类似资料:
  • 我试图在我的应用程序中分解组件,但在理解如何将状态和道具从父组件传递给子组件时遇到了一些问题。对于上下文,“我的子组件”是一个表,它在行中呈现较小的组件。 现在我有一个名为BookComponents的常量,它需要一本书并写入状态。我被卡住的地方是传递状态和道具到我的书桌组件,这样我就可以在书桌上呈现书籍,而不是在主页上。 主页: 书桌代码:

  • 我目前正在使用全局构建统计插件,显示我们的工作状态在一个良好的格式图表。

  • 在我的React JS项目中,我正在处理。我已经通过了使用进行私有路由和身份验证的示例。 https://reacttraining.com/react-router/web/example/auth-workflow 根据这个留档,他们创建了一个作为无状态组件。 但我的要求是将其转换为有状态的React组件,因为我想将我的组件连接到redux存储。 这是我的代码。 无状态组件 我将这个组件转换成

  • 我已经用ReactJS和ES6进行了几天的实验,并创建了两个组件,即

  • 首先-我知道,根据官方MS文档,通过部署控制更新具有发布状态的工作项的内置功能仅在发布管道中受支持,而在多阶段YAML管道中不受支持(请参阅此处记录的第一个注释:https://docs.microsoft.com/en-us/azure/devops/boards/work-items/work-item-deployments-control?view=azure-德沃斯) 是否有人使用pow

  • 我有一个React应用程序,其中来自父组件的道具被传递到子组件,然后道具设置子组件的状态。 如何让它更新子组件上的状态? 我的精简代码: