【问题标题】:How do I define a prop at the level of a component?如何在组件级别定义道具?
【发布时间】:2015-01-28 06:17:20
【问题描述】:

我正在使用多个级别的 React JSX 模板作为我的 Express 应用程序视图(使用 https://github.com/reactjs/express-react-views),并且想知道从最低级别的模板(default.jsx,in GitHub 上的示例和我的项目)到所有使用 {this.props.children} 的模板。我很确定将它放在 default.jsx 级别。

我的问题是:我不知道在不使用<CustomComponent prop="prop value"> 语法的情况下定义道具的正确方法是什么(我想做的是siteName)。在与组件相同的级别/相同的文件中执行此操作的正确方法是什么?或者是否存在我缺少的抽象级别?代码如下。

/views/layouts/default.jsx(我想定义siteHeader,并让它一直向下传播):

/** @jsx React.DOM */

var SiteHeader = require('../header.jsx');

var DefaultLayout = React.createClass({
    render: function() {
        return (
            <html>
                <head>
                    <h1>{this.props.siteName} - {this.props.title}</h1>
                </head>
                <body>
                <SiteHeader></SiteHeader>
                {this.props.children}
                </body>
            </html>
        );
    }
});

module.exports = DefaultLayout;

/views/index.jsx

/** @jsx React.DOM */

var DefaultLayout = require('./layouts/default.jsx');

var ViewsExport = React.createClass({
    render: function() {
        return (
            <DefaultLayout title={this.props.title}>
                <div>Hello, {this.props.name}!</div>
            </DefaultLayout>
        )
    }
});

module.exports = ViewsExport;

/views/header.jsx:

/** @jsx React.DOM */

var SiteHeader = React.createClass({
    return: function() {
        <header>
            <h1><a href="">{this.props.siteName}<h1>
            <nav>
                ...
            </nav>
        </header>
    }
});

/routes/index.js

exports.index = function(req, res){
  res.render('index', { /* props */ });
};

【问题讨论】:

  • 有点不清楚您要达到的目标。您可以通过写 transfer all props 从所有者组件到他的孩子:return &lt;Component {...this.props} more="values" /&gt;;

标签: templates reactjs


【解决方案1】:

不确定,但我认为您正在寻找的是 React context

虽然我们没有记录上下文,但它以某种形式存在于 已经反应过来了。它作为一种通过树传递值的方式而存在 无需在每一点都使用道具。我们已经看到了 需要一次又一次地出现,所以我们想让它变得简单 可能的。它的使用有性能权衡,并且有已知的 我们实施中的弱点,所以我们要确保这是一个 实体特征。

另见http://davehking.com/2014/11/15/introduction-to-contexts-in-react-js.html

它尚未正式发布,因为它似乎存在一些极端情况问题,但实际上已被许多人使用,并且框架构建在 React 之上。我也使用它,还没有发现任何错误。一位 React 团队成员告诉我,该功能不会被删除,因此 API 可能会更改,但您仍然可以期待该功能会出现在下一个版本中。

【讨论】:

  • 不幸的是,服务器端渲染需要上下文(或不切实际的纯度),因为单例与 node.js 不兼容。如果您使用它,请确保锁定准确的 React 版本,并在升级前阅读详细的发行说明。
猜你喜欢
  • 2019-02-24
  • 2020-08-03
  • 2018-02-25
  • 1970-01-01
  • 2020-11-18
  • 2018-04-10
  • 2023-02-03
  • 2023-03-05
  • 2017-07-08
相关资源
最近更新 更多