将React中的函数从组件移动到引用的库

大卫·耶瑟(David Yeiser)

我正在学习React,但不确定如何设置此模式。我只是想念这可能真的很容易。

我有一个控制状态的主要组件。它具有更新状态的所有功能,并通过道具将这些信息向下传递给子组件。我简化了代码,将重点放在这些功能之一上。

现在是组件,所有组件均应正常工作:

ManageMenu.js

import React from 'react'

class ManageMenu extends React.Component {
  constructor() {
    super()

    this.toggleEditing = this.toggleEditing.bind(this)

    // Set initial state
    this.state = {
      menuSections: []
    }
  }

  toggleEditing(id) {
    const menuSections = this.state.menuSections

    menuSections.map(key => (key.id === id ? key.details.editing = id : ''))

    this.setState({ menuSections })
  }

  render() {
    return (
      ...
    )
  }
}

export default ManageMenu

toggleEditing通过道具传递给子组件,如果单击了编辑按钮,则该子组件将使用它来呈现编辑表单。

我在此组件中拥有大约10种这些不同的功能,我想做的就是将它们移至外部lib/methods.js文件,然后引用它们。下面是我想要的代码或类似的代码,但是React不喜欢我在做什么。引发语法错误:

Failed to compile.
Error in ./src/components/ManageMenu.js
Syntax error: Unexpected token
toggleEditing(id, menuSectionId, this.state, this)

这是我想做的...

lib / methods.js

const toggleEditing = function(id, state, that) {
  const menuSections = state.menuSections

  menuSections.map(key => (key.id === id ? key.details.editing = id : ''))

  that.setState({ menuSections })
}

module.exports = {
  toggleEditing
}

然后在我的组件中:

ManageMenu.js

import React from 'react'
import { toggleEditing } from '../lib/methods'

class ManageMenu extends React.Component {
  constructor() {
    super()

    // Set initial state
    this.state = {
      menuSections: []
    }
  }

  toggleEditing(id, this.state, this)

  render() {
    return (
      ...
    )
  }
}

export default ManageMenu

任何帮助表示赞赏,谢谢!

大卫·耶瑟(David Yeiser)

感谢@Nocebo,有关如何将功能外部化的答案在这里:将各种React组件中的通用功能外部化

在我的情况下

  1. 我需要toggleEditing(id, this.state, this)在任何地方删除“浮动”呼叫。更新:发生此错误是“因为它正在调用类定义中的方法。” (请参阅下面的Pineda评论
  2. 删除语句this.右侧的this.toggleEditing开头constructor()
  3. 在中更新函数lib/methods.js以删除statethat变量,因为其绑定到thisconstructor()

请参阅下面的更新代码。

ManageMenu.js

import React from 'react'
import { toggleEditing } from '../lib/methods'

class ManageMenu extends React.Component {
  constructor() {
    super()

    this.toggleEditing = toggleEditing.bind(this)

    // Set initial state
    this.state = {
      menuSections: []
    }
  }

  render() {
    return (
      ...
    )
  }
}

export default ManageMenu

lib / methods.js

const toggleEditing = function(id) {
  const menuSections = this.state.menuSections

  menuSections.map(key => (key.id === id ? key.details.editing = id : ''))

  this.setState({ menuSections })
}

module.exports = {
  toggleEditing
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将引用(右值)移动到函数

将组件从应用程序移动到库时出错

将片段移动到组件中后,React Native Datatable 不显示

将引用其他函数的函数传递给 React 中的子组件

如何将函数移动到单独的方法中?

将React类移动到单独的文件中

如何将焦点移动到 React js 中的项目?

将组件移动到Angular中的另一个父组件

在反应中单击时将 div 中的组件移动到另一个 div

C ++ 03通过构造函数将向量移动到类成员中(移动语义)

如何将引用模块中字段的匿名提供程序移动到单独的类中?

将单独集合中的引用文档移动到原始集合mongodb中

将std :: string移动到函数param

将函数传递给React中的组件

在将组件移动到另一个父组件中时如何保存组件的实例?

如何使用 React 中的函数库将数据从子组件传递到二级以上的父组件?

使用 webpack 将 css 移动到 angular 4 组件中的外部文件

将表列移动到新表并在PostgreSQL中作为外键引用

在将值移动到元组类型枚举变体中后,如何轻松获取对值的引用?

使用数据库优先方法的WPF中的DataAnnotation-如何将数据注释移动到伙伴类(包括)。IsValid函数

将NetBeans中的数据库移动到另一台计算机

将几个Maven模块提取/移动到新的Git存储库中

如何将数据库移动到mongodb中的另一个分片

通过PHP将数据从SQL数据库移动到JavaScript中的数组

如何根据公共条目将数据库表行移动到列中

git:将隐藏项移动到另一个目录中的存储库

如何将日志从数据库移动到Magento EE中的文件?

如何将 SQLite 库文件移动到 .NET 项目输出中的子目录?

如何将组件对象移动到全局对象?