我正在尝试创建一个自定义复选框组件(实际上是一个三态,但除了说我不只是使用INPUT之外,这是无关紧要的),我不知道如何让它能够改变“ “检查”来自对自身的点击以及来自父母的 Value 集 .
目前,我让它作为一个自给自足的组件工作,它接受一个onChange prop与它调用的处理程序回调,以便在点击后发送父组件的值 . 它使用状态来存储由显示器引用的检查 .
如果它只是一个检查的显示,从外部管理 Value ,我就像我一样使用状态,但我的问题是我希望它可以点击以打开和关闭,并允许父母转向它也是开关的 .
我是React的初学者和“React的思维方式”所以我怀疑我只是接近这个错误 . 我得到的印象是,这样做的正确方法是将它作为一个仅显示组件,将点击向上传递给父级进行处理,然后从父级接收到值更改的道具更新,但是在我看来,这会使组件的可重用性降低 .
那么我将如何从内部和父源进行复选框更改?
我们也欢迎相关链接 .
3 回答
您可以将复选框视为一个哑组件,这意味着它不包含任何内部状态,但只通过道具从外部接收数据然后再渲染它们 . 你可以看到哑组件here的详细定义 .
同时,当单击该复选框时,此类事件将由组件的父级或事件祖先处理,这称为逆数据流,这在Facebook的Thinking in React博客文章中有所描述 .
此外,为了确定哪个组件应该具有某些状态,我发现以下指南非常有用:
伪代码片段:
您只从父级更改它 .
现在,如果您希望从
<ChildComponent/>
控制已检查状态,只需从<ChildComponent/>
调用this.props.handleCheck()
这样,控件将始终在
<ParentComponent/>
中通过this.props.handleCheck()
this.handleChildCheck()
中的<ChildComponent/>
中可用 .使用querySelectorAll查找组件 . 添加事件侦听器以监视更改 . 在更改时运行另一个querySelectorAll来查找子项并禁用或启用 . 这可能无法满足您的所有需求,但它会让您开始朝着正确的方向前进 . 这是普通的JavaScript,因此不需要其他库 .