reactjs - 如何在 React 中管理大量的处理程序
问题描述
我在分层结构中有几个组件,每个组件都需要多个事件处理程序,通过多层传递。这就是我所拥有的App.js
:
...
<Files
plugins={this.state.plugins}
folders={this.state.folders}
hover={this.state.hover}
editing={this.state.editing}
onClickFolder={this.handleClickFolder}
onCreateFile={this.handleCreateFile}
onCreateFolder={this.handleCreateFolder}
onDeleteFolder={this.handleDeleteFolder}
onMouseEnterFolder={this.handleMouseEnterFolder}
onMouseLeaveFolder={this.handleMouseLeaveFolder}
onStartRenameFolder={this.handleStartRenameFolder}
onRenameFolder={this.handleRenameFolder}
onClickFile={this.handleClickFile}
onDeleteFile={this.handleDeleteFile}
onMouseEnterFile={this.handleMouseEnterFile}
onMouseLeaveFile={this.handleMouseLeaveFile}
onStartRenameFile={this.handleStartRenameFile}
onRenameFile={this.handleRenameFile}
onStopEditing={this.handleStopEditing}
onRightClick={this.handleRightClick}
/>
...
然后在components/files.jsx
:
...
<FolderList
src={[]}
hover={props.hover}
editing={props.editing}
folders={props.folders}
onClickFolder={props.onClickFolder}
onCreateFile={props.onCreateFile}
onCreateFolder={props.onCreateFolder}
onDeleteFolder={props.onDeleteFolder}
onMouseEnterFolder={props.onMouseEnterFolder}
onMouseLeaveFolder={props.onMouseLeaveFolder}
onStartRenameFolder={props.onStartRenameFolder}
onRenameFolder={props.onRenameFolder}
onClickFile={props.onClickFile}
onDeleteFile={props.onDeleteFile}
onMouseEnterFile={props.onMouseEnterFile}
onMouseLeaveFile={props.onMouseLeaveFile}
onStartRenameFile={props.onStartRenameFile}
onRenameFile={props.onRenameFile}
onStopEditing={props.onStopEditing}
onRightClick={props.onRightClick}
/>
...
依此类推,还有两个文件。正如您所看到的,代码开始看起来很混乱,并且违背了编程中的 DRY(不要重复自己)的概念,因为当我创建一个新的处理程序时,我必须更新所有四个文件。我要问的是是否有更有效的方法来做到这一点。
解决方案
你有很多选择。仔细浏览此页面。https://www.robinwieruch.de/react-pass-props-to-component
推荐阅读
- python - Python 使用字典或列表作为用户输入
- ionic-framework - 缺少“可观察”类型的以下属性
- python - 如何合并和交错 NumPy 对象数组的列
- arrays - 从 LUA 中的文本文件生成列表/数组
- python - TypeError:列表索引必须是整数或切片,而不是图像处理时的元组错误
- coldfusion - 更新列表以在 stat 和 end 处使用逗号
- java - 在 Eclipse 中使用泛型密封接口
- laravel - Laravel 2 年条纹计划
- node.js - 使用 nodejs 和 mssql 模块创建带有参数化输入的 SQL Server 数据库
- windows - 嵌套 for 循环:使用批处理脚本将当前屏幕分辨率存储为各种远程机器的变量