Skip to content

Instantly share code, notes, and snippets.

@JLarky
Last active August 29, 2015 14:14
Show Gist options
  • Save JLarky/3914c1d8ba99c643263f to your computer and use it in GitHub Desktop.
Save JLarky/3914c1d8ba99c643263f to your computer and use it in GitHub Desktop.
How to use react elements inside knockout
span(data-bind='reactElement: someElement')
$(function () {
var reactElementUmount = function (element) {
$(element).each(function (i, elem) {
React.unmountComponentAtNode(elem);
});
};
ko.bindingHandlers.reactElement = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
// clean up events if KO removes the element
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
reactElementUmount(element);
});
},
update: function(element, valueAccessor, allBindings) {
var react = ko.utils.unwrapObservable(valueAccessor());
var reactElement = react && react.element;
if (reactElement) {
var reactParams = _.omit(react, ['element'])
$(element).each(function (i, elem) {
React.render(reactElement(reactParams), elem);
})
} else {
reactElementUmount(element);
}
}
};
});
var someElement = ko.observable({element: TodoApp, id: 'some id', otherProps: 123});
render: function () {
console.log(this.props.id, this.props.otherProps)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment