【问题标题】:Functional Component unable to render return value based on props values功能组件无法根据 props 值渲染返回值
【发布时间】:2020-01-20 01:26:34
【问题描述】:

目标:实现一个 Toast 消息模式(使用功能组件),它将根据 ToastModal 组件返回的道具值(props.showToastModal)显示或隐藏

预期:直接使用 props.showToastModal 将确定 Toast 是否出现

实际:基于props.showToastModal没有出现Modal

代码如下: 父组件

class Datasets extends Component {
  constructor(props) {
    super(props)
    this.state = {
      showToastModal: false,
      toastModalText: ''
    }
  }

 toggleOff = () => {
    this.setState({ showToastModal: false, toastModalText: '' })
  }

 render() {
   {this.state.showToastModal && (
          <ToastModal
            showToastModal={this.state.showToastModal}
            toastModalText={this.state.toastModalText}
            toggleOff={this.toggleOff}
          />
   )}
 }
}

子组件 这有效:

const ToastModal = (props) => {

  const isOpen = props.showToastModal

  return (
    <div className={`${css.feedbackModal} ${isOpen ? css.show : css.hide}`}>
      {props.toastModalText}
      <i
        className={`bx bx-x`}
        onClick={() => props.toggleOff()}
      />
    </div>
  )
}

export default ToastModal

但这不是(直接使用 props 值):

const ToastModal = (props) => {

  return (
    <div className={`${css.feedbackModal} ${props.showToastModal ? css.show : css.hide}`}>
      {props.toastModalText}
      <i
        className={`bx bx-x`}
        onClick={() => props.toggleOff()}
      />
    </div>
  )
}

export default ToastModal

使用 const isOpen = props.showToastModal 可以按预期工作。我很困惑为什么会发生这种情况。这是一个 React 生命周期问题,还是使用可能在渲染期间更新的 props 值是不好的做法?

【问题讨论】:

  • 看一眼您的代码,功能上没有任何区别。您是否确信其他一切都没有改变?您能否提供 Codesandbox 示例或更新并使用内联堆栈 sn-p(支持 React)?
  • 第二个@skovy 说的,从你发布的所有内容中你所做的只是浓缩了一些逻辑。同意共享一个复制您的问题的代码框。

标签: reactjs


【解决方案1】:

请尝试解构对象

const ToastModal = ({ showToastModal, toggleOff }) => {

  return (
    <div className={`${css.feedbackModal} ${showToastModal ? css.show : css.hide}`}>
      {props.toastModalText}
      <i
        className={`bx bx-x`}
        onClick={toggleOff}
      />
    </div>
  )
}

export default ToastModal

【讨论】:

  • @ravibagul91 你可以通过解构 Ex 获得所有道具:({ showToastModal, toggleOff }) 我会更新我的帖子,请再次查看
猜你喜欢
  • 1970-01-01
  • 2021-06-08
  • 2019-08-09
  • 2017-02-22
  • 1970-01-01
  • 2020-06-13
相关资源
最近更新 更多