我可以使用 state AND props 在父/子之间进行控制吗

Posted

技术标签:

【中文标题】我可以使用 state AND props 在父/子之间进行控制吗【英文标题】:Can I use state AND props for control between parent/child 【发布时间】:2017-07-17 13:29:08 【问题描述】:

我正在学习 React/redux - 很棒的框架,不知道 JS 能这么酷!!!

我的问题...

我有一个父组件和一个子组件。孩子可以通过以下方式隐藏/显示:

    按下孩子身上的按钮将其隐藏 按下父级按钮以显示/隐藏

1) 可以通过使用 this.state 来控制 2) 可以通过从父级设置一个道具来控制

我的问题是我无法用 State AND 道具控制孩子,因为我认为它是 state OR 道具。

(不完全正确。我可以使用事件组件WillReceiveProps - 这是要走的路吗?即主要使用状态,但在道具和状态之间通过事件转移)

欢迎其他好的建议

谢谢

__EDIT________EDIT_________EDIT_______________EDIT__________

又看了一遍FB docu,猜猜我的建议是推荐的方式:

componentWillReceiveProps() 在挂载组件之前调用 收到新道具。如果您需要更新状态以响应 道具更改(例如,重置它),您可以比较 this.props 和 nextProps 并使用 this.setState() 执行状态转换 这个方法。

【问题讨论】:

【参考方案1】:

您可以将状态和函数从父级传递给子级作为道具。此功能可用于切换状态。您可以在父母和孩子中使用此功能。

例子:

// parent
import React,  Component  from 'react';
import ChildComponent from './path/to/child';

class ParentComponent extends Component 
    constructor(props) 
        super(props);
        this.handleToggle = this.handleToggle.bind(this);
    

    state = 
        isVisible: false;
    

    handleToggle(current) 
        this.setState(
            isVisible: !current
        )
    

    render()
        <div>
            <ChildComponent handleToggle=this.handleToggle isVisible=this.state.isVisible />
            <button onClick=(isVisible) => this.handleToggle(this.state.isVisible)>Toggle me</div>
        </div>
    


export default ParentComponent;


// child
import React from 'react';

const ChildComponent = ( isVisible, handleToggle ) => 
    return (
        <button onClick=(isVisible) => handleToggle(isVisible)>Toggle me</div>
    );


export default ChildComponent;

【讨论】:

谢谢@patrick slick...我已经支付了功能...只是没想过在双方都使用它

以上是关于我可以使用 state AND props 在父/子之间进行控制吗的主要内容,如果未能解决你的问题,请参考以下文章

Reactjs 入门基础

React parent pass children 将触发重新渲染而不更改 state/props

深度理解React底层实现原理

激活函数后,父状态不会更新

react--props

刷新页面后如何保留props.location.state?(不使用本地存储)