ReactJS 组件函数

IT技术 javascript reactjs
2021-05-01 19:13:37

还有一些关于 ReactJS 的愚蠢问题 =) 有没有办法给 React 组件添加公共函数?我正在尝试做这样的事情:

var LoginForm = React.createClass({
    getInitialState: function() {
    },  
    render: function() {
    },
    MyFunc: function () {
    }
})
...
var login_form = LoginForm({});
React.renderComponent(login_form, document.body);
...
login_form.MyFunc (); <-- error

你能解释一下我做错了什么吗?

3个回答

您不应该在组件本身之外使用组件的方法(或将其作为回调传递给子组件)。您应该将这些视为私有方法。

但是,你可以使用的react称为一个特点statics是提供的功能可以从组件外。但是,这些应该被视为类的静态函数,因此它们无法访问组件实例的内部(例如this.propsthis.state)。

以下是组件的一些静态设置示例:

var Component = React.createClass({
    statics: {
        // these functions are available outside the component
        renderToBody: function() {
            React.renderComponent(
                <Component />,
                document.body
            );
        }
    },

    // cannot access this function outside the component
    getHelloWorld: function() {
        return 'Hello World!';
    },

    render: function() {
        return (
            <div>{this.getHelloWorld()}</div>
        );
    }
});

因此,如果我们调用,React.renderComponent(Component({}), elem)则组件将渲染到elem但由于您可以调用的静态Component.renderToBody(),它会将组件直接渲染到<body>元素。

IE:在组件statics对象内定义的函数可直接作为静态函数使用。然而,你必须记住,他们是static在他们没有实例化的组件对象的一部分,它们是您可以在一流的呼叫只是功能。

React 的整个想法是组件尽可能独立。您永远不需要直接从组件外部访问组件实例函数,因为您应该做的只是更改组件的 props 并重新渲染它,以便它可以在内部进行更改。

这是一个例子:

var Component = React.createClass({
    propTypes: {
        // always get in the habbit of using propTypes!
        message:    React.PropTypes.string.isRequired,

        show:       React.PropTypes.bool
    },
    render: function() {
        return (
            <div style={{display: this.props.show ? 'block' : 'none'}}>
                {this.props.message}
            </div>
        );
    }
});

而您可能已经在show()组件上创建了一个方法(以便您可以执行component.show(true)component.show(false)显示/隐藏 - 您将其作为属性传递以获得相同的结果。

调用React.renderComponent(Component({message: 'foo', show: true}), elem)将使组件可见,重新渲染show: false将隐藏它,等等。相同的结果,但使用props,这是react方式。

简单的答案是 LoginForm({})不返回组件它返回一个描述符对象,稍后 React 将使用该对象实例化组件。您可以通过两种方式访问​​实际组件:

  • 就像this在组件方法中一样
  • 通过给组件一个props;实际组件将在创建者中可用,如 this.refs。创建者执行时的名称ref=namecomponentDidMount

http://facebook.github.io/react/docs/more-about-refs.html

可以通过使用渲染函数的结果:

var login_form = React.renderComponent(LoginForm({}), document.body);
login_form.MyFunc();
login_form.setProps({loaded: true});

这个用例是你可以在根组件上调用 setProps (但只能在根上)。