有没有可能使用React而不呈现HTML?

我想知道是否有可能使用React做逻辑和发送数据回到一个JavaScript函数,而不呈现任何HTML。 我正在考虑的组件是将某些数据传递给它,并将数据发送回javascript函数以外的反应。 我知道这是可以做到的,而且我自己也完成了这个部分,但是我不知道如何在没有呈现html的情况下做到这一点。 这甚至是反应的实际用例吗?

我正在考虑的组件是将某些数据传递给它,并将数据发送回javascript函数以外的反应。

你为什么要创build一个组件? 是不是一些正规的JavaScriptfunction不够? 如果您不想生成任何HTML,使用React组件似乎很奇怪。

无论如何,你可以创build一个组件,其中的渲染function是这样的:

render: function() { return false; } 

要么

 render: function() { return null; } 

返回undefined不起作用。 而且,对于无状态function组件,以前版本的React不允许返回falsenull但是现在可以。


请注意,React也可以在服务器端运行,所以我猜测可以使用它,不涉及任何DOM修改(但可能只是虚拟DOM计算)。

编辑 :反应16将允许返回数组和string,这意味着你也可以返回[]

只是为了澄清本诺的评论。 ReactComponent.render方法doc指出:

你也可以返回nullfalse来表示你不想渲染任何东西。 在幕后,React呈现一个<noscript>标签来处理我们当前的差异algorithm。 当返回nullfalsethis.getDOMNode()将返回null

有可能的。 react-router是组件不能呈现HTML的例子。 请参阅https://github.com/rackt/react-router

这是react-fouter的Route组件,返回false的render方法:

 const Route = React.createClass({ statics: { createRouteFromReactElement }, propTypes: { path: string, component, components, getComponent: func, getComponents: func }, /* istanbul ignore next: sanity check */ render() { invariant( false, '<Route> elements are for router configuration only and should not be rendered' ) } }) 

是的,这是非常有可能的,非常有用,在懒惰加载组件的情况下。

考虑这个例子与react-router。

 import React from 'react' import { Route, Link } from 'react-router-dom' function asyncComponent(getComponent) { return class AsyncComponent extends React.Component { static Component = null; state = { Component: AsyncComponent.Component }; componentWillMount() { if (!this.state.Component) { getComponent().then(Component => { AsyncComponent.Component = Component this.setState({ Component }) }) } } render() { const { Component } = this.state if (Component) { return <Component {...this.props} /> } return null } } } const Page1 = asyncComponent(() => System.import('./Page1.js').then(module => module.default) ) const Page2 = asyncComponent(() => System.import('./Page2.js').then(module => module.default) ) const Page3 = asyncComponent(() => System.import('./Page3.js').then(module => module.default) ) const ParentComponent = () => ( <div> <ul> <li> <Link to="/page1">Page1</Link> </li> <li> <Link to="/page2">Page2</Link> </li> <li> <Link to="/page3">Page3</Link> </li> </ul> <div> <Route path="/page1" component={Page1}/> <Route path="/page2" component={Page2}/> <Route path="/page3" component={Page3}/> </div> </div> )