Reactjs 公开React组件函数

Reactjs 公开React组件函数,reactjs,components,Reactjs,Components,根据最佳实践公开某些react组件功能的正确选项是什么 选择1 在组件外部创建功能,如: export const someFunction = () => { //do something } class MyComponent extends Component {} export default MyComponent; class MyComponent extends Component { someFunction() { // } } e

根据最佳实践公开某些react组件功能的正确选项是什么

选择1 在组件外部创建功能,如:

export const someFunction = () => { //do something }

class MyComponent extends Component {}

export default MyComponent;
class MyComponent extends Component {
    someFunction() {
     // 
    }
 }

export default MyComponent;
使用上述组件:

import MyComponent, { someFunction } from './components/myAwesomeComponent';  

class ChildComponent extends Component {
    parentComponentFunction() {
       someFunction();
    }

    render() {
        <div>
            <MyComponent />
        </div>
    }
}
import MyComponent frrom './components/myAwesomeComponent';  

class ChildComponent extends Component {

    parentComponentFunction() {
          this.refs.parentComponent.someFunction();
    }

    render() {
       <div>
         <MyComponent ref="parentComponent" />
       </div>
    }

}
使用上述组件:

import MyComponent, { someFunction } from './components/myAwesomeComponent';  

class ChildComponent extends Component {
    parentComponentFunction() {
       someFunction();
    }

    render() {
        <div>
            <MyComponent />
        </div>
    }
}
import MyComponent frrom './components/myAwesomeComponent';  

class ChildComponent extends Component {

    parentComponentFunction() {
          this.refs.parentComponent.someFunction();
    }

    render() {
       <div>
         <MyComponent ref="parentComponent" />
       </div>
    }

}
从“/components/myAwesomeComponent”导入MyComponent;
类ChildComponent扩展组件{
parentComponentFunction(){
this.refs.parentComponent.someFunction();
}
render(){
}
}
选择3 不知道它是否存在


它有意义吗?或者您需要一个更好的示例吗?

如果
某个函数
需要引用
,则将其定义为成员函数。否则,将其作为单独的实用程序函数保留,或将其声明为类内的静态函数(选项3):


还有一个ESLint规则可以控制它:

它对我有效(选项3)。我还将静态函数导出为:export const someFunction=MyComponent.someFunction;所以我可以使用类似这样的东西:import MyComponent,{someFunction}from./components/myAwesomeComponent';谢谢你的回答。你的问题太抽象了。请清楚地说明你正在努力实现的目标。通常,您永远不想“调用”组件方法。相反,使用道具将函数从一个组件传递到另一个组件。它是一个音乐播放器,someFunction()类似于播放、停止等等。。。我想用这个播放器创建一个组件,而不是组件包含自己的按钮,我想公开这些功能。我知道我作为道具的传递方式,但它只在父母和孩子之间起作用。。。我想要的是相反的,但我不知道这是否是一个好的做法。ThanksReact要求您以更具声明性的方式工作。您将使用
而不是
MusicComponent.play()
。父母只给孩子传递道具。但是这些道具是可以改变的,正是通过改变道具,父母才能操纵他们的孩子。明白了。但这里的问题是因为Triton®声波风廓线仪没有组件,我必须导入其CDN,用户只需添加我的组件,一切正常,但可以自由地拥有自己的控件,如播放、停止等。我能做的是避免这个概念,用户必须将播放器(triton var)传递到我的组件中,我可以在那里使用它,用户仍然可以选择使用我的控件或他自己的控件。我对我的组件不是100%满意,但也不是太糟糕,因此我决定征求一些专家的意见。谢谢你的回复。