首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJS :如何在ReactJS组件中包装knockoutJS页面

ReactJS :如何在ReactJS组件中包装knockoutJS页面
EN

Stack Overflow用户
提问于 2019-01-06 20:07:19
回答 1查看 1.1K关注 0票数 2

视图(HTML)

代码语言:javascript
复制
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2><span data-bind="text: fullName"> </span>!</h2>

nameConcat.js (KnockoutJS)

代码语言:javascript
复制
var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);

    this.fullName = ko.pureComputed(function() {
        return this.firstName() + " " + this.lastName();
    }, this);
};

ko.applyBindings(new ViewModel("Tom", "Haykens"));

反应组分

代码语言:javascript
复制
class NameConcat extends React.Component {
  render() {
    return (
       ???
    );
  }
} 

我是ReactJS新手。如何从knockoutJS组件显示ReactJS应用程序页?用KnockoutJS重写ReactJS页面不是一种选择。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-02-27 11:50:59

在我的项目中,骨架是用Durandel设计的,这是我不能使用React重写选项的原因之一。

所以我要用的是:

案例1) -希望以KO方式绑定数据

代码语言:javascript
复制
public observableVariable = Observable();

public binding() { // durandle lifecycle hook // observable declared with the class 
    reactDom.render(<span data-bind={`text: observableVariable `}></span>, document.getElementById('reactRoot'));
    }

希望绑定已经存在的KO页面以作出反应,并让DOM在真正的DOM中进行更新。

代码语言:javascript
复制
public observableVariable = Observable();

public binding() { // durandle lifecycle hook // observable declared with the class 
    reactDom.render(<div data-bind={`compose: { model: '-- index page where the knockout binding is written --',activationData: { --Observable parameter--: --Observable data--}    }`}></div>, document.getElementById('reactRoot'));
    }

案例3) -模板绑定

//宣布在顶部所有可观察到的 //所有这些组件都可以从react组合子节点发送到任何位置

代码语言:javascript
复制
<div dangerouslySetInnerHTML={{
            __html: `<!--ko widget: {
                        kind: '--index--',
                        name: 'sample comp',
// write all the observable dependencies here , 
                        id: 'sample Id'
                    } -->
                    <!-- /ko -->`}} />

例4)如果您希望使用可观察的方法加载常规react组件:我的意思是,如果您想要维护一些可观察的数据,就可以在react中使用。

有一个跟踪对象,并使用可观察订阅保持数据同步:

代码语言:javascript
复制
{
    self reactPropValue;
    self.selectedVals.subscribe(function (newValue: any) {
                    let val = ko.toJSON(newValue);
                    reactPropValue= ko.toJSON(selectedVals());
                });
}

现在,您可以将它作为一个支柱传递到reactDom组件中,每次可观察到的订阅更改都会确保获得一个新的值,不要忘记将reactDom封装在一个函数中并调用订阅,因为通过设计它不会触发重新加载。

如果您不在durandel中,您可能需要自己添加ko.applybinding,否则就可以了。

请注意控制台窗口中的错误消息,如果您得到了错误消息,可能会有错误消息。

如果我的答案没有正确的格式化,很抱歉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54065456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档