如何将外部方法传递给React中的无状态功能组件

时间:2016-09-29 14:12:14

标签: javascript reactjs meteor flow-router

我正在使用FlowRouter / Meteor和React,我正在尝试将FlowRouter.go方法传递给react按钮,以便在按下按钮时导航到新页面。我想这样做是为了将按钮保持为可重用的组件,但我正在努力弄清楚如何将FlowRouter.go方法传递给无状态功能组件。这是我现在所拥有的简化版本:

import React, { Component } from 'react';
import { FlowRouter } from 'meteor/kadira:flow-router';

const ParentComponent = () => {
  // define text and styles here
  return (
    <div>
      <Button text={text} style={styles} action={FlowRouter.go("Register")}/>
    </div>
  );
}

然后我的按钮组件:

import React, { Component } from 'react';

// Call to action button
const Button = ({text, style, action}) => {
  return (
    <button className="btn" style={style} onClick={() => action()}>
      {text}
    </button>
  );
}

Button.propTypes = {
  text: React.PropTypes.string.isRequired,
  style: React.PropTypes.object,
  action: React.PropTypes.func
};

Button.defaultProps = {
  text: "A button.",
  style: {
    height: "100%",
    width: "100%",
  },
  action: null
};

export default Button

有谁知道将方法从第三方库加载到React功能组件需要什么语法?

1 个答案:

答案 0 :(得分:5)

你需要传递一个功能。您实际上是通过调用FlowRouter.go执行FlowRouter.go("Register")函数。

试试这个:

const ParentComponent = () => {
  // define text and styles here
  return (
    <div>
      <Button text={text} style={styles} action={() => FlowRouter.go("Register")}/>
   </div>
  );
}

另外......因为action是一个函数,你可以将它直接传递给你的onClick,如下所示:

<button className="btn" style={style} onClick={action}>