reactjs - 使用 React 渲染带有子内容的 Polymer 1.0 元素

标签 reactjs polymer polymer-1.0

我为此苦苦挣扎了一段时间,终于找到了问题的根源,但我不知道如何解决!

考虑在 React 渲染方法中渲染 Polymer 的元素:

ReactDOM.render(
    <paper-button>Ok</paper-button>,
    document.getElementById('root')
);

之前的代码自 <paper-button> 起工作正常没有子元素。但下面的例子不起作用:

ReactDOM.render(
    <paper-dialog>
        <h2>Header</h2>
        <paper-dialog-scrollable>
            Lorem ipsum...
        </paper-dialog-scrollable>
        <div class="buttons">
            <paper-button dialog-dismiss>Cancel</paper-button>
            <paper-button dialog-confirm>Accept</paper-button>
        </div>
    </paper-dialog>,
    document.getElementById('root')
);

因为<paper-dialog>有几个子元素。在 Polymer 的库中有一个 <content>标签,代表命名自定义标签中给出的子元素以及它们应如何嵌入到自定义标签的最终实现中(它的作用类似于门户)。看起来当使用 React 将 Polymer 元素添加到文档中时,子元素不会通过门户传递!

当提到paper-dialog时 polymer 元素经过 React,结果如下:

<paper-dialog data-reactroot="">
    <h2>Header</h2>
    <paper-dialog-scrollable
        class="x-scope paper-dialog-scrollable-0 no-padding scrolled-to-bottom">
        Lorem ipsum...
    </paper-dialog-scrollable>
    <div>
        <paper-button
            role="button" tabindex="0"
            animated="" aria-disabled="false"
            elevation="0" dialog-dismiss="true"
            class="x-scope paper-button-0">
            Cancel
        </paper-button>
        <paper-button
            role="button" tabindex="0"
            animated="" aria-disabled="false"
            elevation="0" dialog-confirm="true"
            class="x-scope paper-button-0">
            Accept
        </paper-button>
    </div>
</paper-dialog>

在这种情况下,如果我按照 google 的指示进行操作(首先将标签放入 HTML 中),那么 dom 树将如下所示:

<paper-dialog>
    <h2>Header</h2>
    <paper-dialog-scrollable
        class="x-scope paper-dialog-scrollable-0 no-padding can-scroll">
        <div id="scrollable"
            class="scrollable style-scope paper-dialog-scrollable fit">
            Lorem ipsum...
        </div>
    </paper-dialog-scrollable>
    <div class="buttons">
        <paper-button
            role="button" tabindex="0"
            animated="" aria-disabled="false"
            elevation="0" dialog-dismiss=""
            class="x-scope paper-button-0">
            Cancel
        </paper-button>
        <paper-button
            role="button" tabindex="0"
            animated="" aria-disabled="false"
            elevation="0" dialog-confirm=""
            class="x-scope paper-button-0">
            Accept
        </paper-button>
    </div>
</paper-dialog>

粗体部分是分歧部分。

有人知道如何将 Polymer 与 React 真正匹配起来吗?

最佳答案

您是否尝试过包装 <paper-dialog>到另一个 react 组件中,然后将其输入到 ReactDOM像这样

var PaperDialog = React.createClass({
    render: function () {
        return (
            <paper-dialog>
                <h2>Header</h2>
                <paper-dialog-scrollable>
                    Lorem ipsum...
                </paper-dialog-scrollable>
                <div class="buttons">
                    <paper-button dialog-dismiss>Cancel</paper-button>
                    <paper-button dialog-confirm>Accept</paper-button>
                </div>
            </paper-dialog>);
    }
});

ReactDOM.render(<PaperDialog />, document.getElementById('root'));

关于reactjs - 使用 React 渲染带有子内容的 Polymer 1.0 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36673089/

相关文章:

css - polymer -带有纸质徽章的图标

polymer - 自定义元素填充 paper-scroll-header-panel 内容高度区域

javascript - Layout 的 CystoscapeJs 与 React 的问题

javascript - 在 React 中设置状态

button - Dart polymer -捕捉切换事件-纸支架内的按钮。 polymer_20错误

polymer - 无法理解 Polymer 2.0 自定义元素属性?

javascript - Polymer 和 Three.js

javascript - 如何最小化javascript中的if语句

reactjs - React.js - 如何设置输入日期类型的默认值

html - polymer 预载微调器