如何模块化JavaScript类(将方法拉出主文件,将方法导入主文件)

是否有可能从JS中的类拉类方法? 原谅我,我是function范式,所以使用React迫使我使用类和this关键字(到目前为止)。 我的一些组件越来越大,我不想要这个。

我无法在Google上find任何有关拉出方法或模块化课程的内容。

有没有一种方法,我可以说“ 从./some_method.js'获取此方法,并使用它,如果它是在这个文件&类中声明 ”没有太多的侵入性的变化?

如果做不到这一点,我假设他们把所有的function都传递给他们。 但是,这感觉很肮脏。

我会感谢一些指导我需要看什么关键字,或者只是如何移动方法,所以我没有2000行文件,需要我20分钟find

 toggleFullMenu() { this.setState({ menuOpen: !this.state.menuOpen}) } 

不用按CTRL + F。 这是我的动力。

我也想知道是否有关于这个与build设者有关的专业技巧。 任何类inheritance范式的警告? 我只是想让方法独立地坐在不同的文件中,但我不知道我在找什么。 我从来没有见过人们在谈论这个。

编辑,我刚刚在MDN中发现:

子类与扩展

extends关键字用于类声明或类expression式中,以创build另一个类的子类。

来源: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

 class Dog extends Animal { speak() { console.log(this.name + ' barks.'); } } 

这是我需要的吗? 我将如何去拉动一堆扩展? 我不想要一个小孩课,听起来不像我所描述的那样。

你可以使用Function.prototype.bind ,这样你就可以控制这个值。

在一个模块中,可以将“方法”作为常规函数导出:

 // methods.js export const toggleFullMenu = () => { this.setState({ menuOpen: !this.state.menuOpen }) } 

在你的组件模块中:

 import React from 'react' import { toggleFullMenu } from './methods' class SomeComponent extends React.Component { constructor () { super() this.toggleFullMenu = toggleFullMenu.bind(this) } render () { return <button onClick={this.toggleFullMenu}>Click Me</button> } } 

toggleFullMenu函数也可以绑定到其他上下文,所以实际上可以在不同的组件之间共享该方法。

编辑:有很多不同的方法来绑定一个函数的上下文,你不限于Function.prototype.bind 。 请参阅本章以了解如何执行此操作的各种方法。

在前面,我可以说是的,你可以从其他类或文件中提取不同的方法,而不是在组件中创build。 有很多不同的方式去,这取决于你的喜好。 你可以从简单到复杂的结构。

首先你需要search和了解(如果你不知道) require()和/或ES6 导入和导出 。 您可以创build独立的函数或对象,并将它们导入您的组件以使用它们。 如果你有重复的function,你在应用程序的不同组件或部分使用这是要走的路。

如果我把this作为一个参数来传递的话,就不像你在你的问题中所说的那样。 而不是通过this ,传递所需的参数function和使用callback或诺言是要走的路。 你可以使用的另一种技术是bindfunction。 ES6的箭头函数不需要bind因为它们不绑定自己的this

如果你想要更复杂一些,你可以创build自己的类 。 class级结构可以赋予做更复杂的事情的能力。 extends使你能够扩展(如你可以从名字中理解的)你的类的方法与他人或覆盖新的。 例如,饮料,小吃,肉类可以是从食品类延伸的类。 当你创build一个自定义组件时,你扩展一个React.Component ,然后使用它的方法。

另一件要考虑的事情是拥有一个2000行的组件让我觉得你也应该考虑把你的组件分成更小的块。 父/子组件关系是React中最常见和受支持的结构。 如果你使用这种模式,你的代码会自动变小,并且更容易跟踪和pipe理。 有很多关于如何将函数作为道具传递给子组件的示例,并在某些特定的条件下使用特定的参数运行它们,然后操作父组件的状态。 你可以看看这些例子,以获得更好的理解。

我希望这些主题能帮助你理解一些事情,并告诉你从哪里开始。

Webpack是一个全function的JavaScript应用程序打包器。 使用Webpack,您可以导入/导出代码,如:

 export default class CustomerView { render() { ... } } 

 import CustomerView from './CustomerView' 

`