来自函数

时间:2017-10-24 13:45:47

标签: javascript reactjs

我有一个React组件

export function sendAlert(msg) {
    showAlert() //How to call in normal function a function from React.Component
}


export class Alert extends React.Component {

  showAlert = () => {
     alert("a")
  };

  render() {
     return (
      <div>
        <h1>Component</h1>
      </div>
    )
  }
}

可以调用从React.Component

调用函数的函数

3 个答案:

答案 0 :(得分:2)

从技术上讲,你可以这样做,但是你应该提取公共函数并从两个地方调用它。

您可以通过创建组件实例来实现:

export function sendAlert(msg) {
    const alert = new Alert();
    alert.showAlert() 
}

但是,您应该提取代码:

function commonShowAlert() {
   alert("a");
}

export function sendAlert(msg) {
    commonShowAlert();
}

export class Alert extends React.Component {

    showAlert = () => {
       commonShowAlert();
    };

    ...
    ...
}

答案 1 :(得分:1)

只有当您的方法是静态方法时,才能这样做。

您可以按如下方式在类中声明您的方法:

static showAlert() { alert("a"); }

然后您可以在CLASSNAME.METHOD_NAME

外部访问它

例如:Alert.showAlert();

正如@Davin在他的回答中所说,你可以在外面声明它(这也是我的建议,更干净的代码),但是如果你必须在课堂内声明它,那么你有静态选项。

答案 2 :(得分:0)

如果您的方法不使用Matmult2<- cxxfunction(signature( a="NumericMatrix",b="NumericMatrix"), plugin="RcppArmadillo",includes = rcpp_inc, body=' Rcpp::NumericMatrix verg(a); int n = verg.nrow(); arma::mat A = Rcpp::as< arma::mat >(a); arma::mat B = Rcpp::as< arma::mat >(b); arma::mat a11 = A(span(0,(n/2)-1), span(0,(n/2)-1)); arma::mat a12 = A(span(0,(n/2)-1), span((n/2),n-1)); arma::mat a21 = A(span((n/2),n-1), span(0,(n/2)-1)); arma::mat a22 = A(span((n/2),n-1), span((n/2),n-1)); arma::mat b11 = B(span(0,(n/2)-1), span(0,(n/2)-1)); arma::mat b12 = B(span(0,(n/2)-1), span((n/2),n-1)); arma::mat b21 = B(span((n/2),n-1), span(0,(n/2)-1)); arma::mat b22 = B(span((n/2),n-1), span((n/2),n-1)); if ( n < 780) return Rcpp::wrap( A * B ); arma::mat P1(Matmult2(a11,(b12-b22))); arma::mat P2(Matmult2((a11+a12),(b22))); arma::mat P3(Matmult2((a21+a22),(b11))); arma::mat P4(Matmult2((a22),(b21-b11))); arma::mat P5(Matmult2((a11+a22),(b11+b22))); arma::mat P6(Matmult2((a12-a22),(b21+b22))); arma::mat P7(Matmult2((a11-a21),(b11+b12))); arma::mat c11((P5+P4-P2+P6)); arma::mat c12((P1+P2)); arma::mat c21((P3+P4)); arma::mat c22((P5+P1-P3-P7)); mat C1 = join_rows(c11, c12); mat C2 = join_rows(c21, c22); mat C = join_cols(C1, C2); return Rcpp::wrap( C ); ,则可以使用静态方法

this

-

import Alert from '../somewhere';

export function sendAlert(msg) {
    Alert.showAlert() // <<--- use Alert.method() to call a static method
}