【发布时间】: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