diff --git a/src/browser/ui/dom/components/ReactDOMInput.js b/src/browser/ui/dom/components/ReactDOMInput.js
index f1718a14c9e..e4cb9978fb4 100644
--- a/src/browser/ui/dom/components/ReactDOMInput.js
+++ b/src/browser/ui/dom/components/ReactDOMInput.js
@@ -103,11 +103,12 @@ var ReactDOMInput = ReactCompositeComponent.createClass({
componentDidUpdate: function(prevProps, prevState, prevContext) {
var rootNode = this.getDOMNode();
- if (this.props.checked != null) {
+ var checked = LinkedValueUtils.getChecked(this);
+ if (checked != null) {
DOMPropertyOperations.setValueForProperty(
rootNode,
'checked',
- this.props.checked || false
+ checked
);
}
diff --git a/src/browser/ui/dom/components/__tests__/ReactDOMInput-test.js b/src/browser/ui/dom/components/__tests__/ReactDOMInput-test.js
index 379567a599d..425a9a837ac 100644
--- a/src/browser/ui/dom/components/__tests__/ReactDOMInput-test.js
+++ b/src/browser/ui/dom/components/__tests__/ReactDOMInput-test.js
@@ -281,6 +281,50 @@ describe('ReactDOMInput', function() {
});
+ it('should make radio input controlled with checkedLink', function() {
+ var RadioInput = React.createClass({
+ render: function () {
+ return (
+
+ );
+ }
+ });
+
+ var stub = ReactTestUtils.renderIntoDocument();
+ var radio = stub.getDOMNode();
+
+ expect(radio.checked).toBe(false);
+
+ radio.checked = true;
+ ReactTestUtils.Simulate.change(radio);
+
+ expect(radio.checked).toEqual(false);
+ });
+
+ it('should make text input controlled with valueLink', function() {
+ var TextInput = React.createClass({
+ render: function () {
+ return (
+
+ );
+ }
+ });
+
+ var stub = ReactTestUtils.renderIntoDocument();
+ var node = stub.getDOMNode();
+
+ expect(node.value).toEqual('initial');
+
+ node.value = 'something';
+ ReactTestUtils.Simulate.change(node);
+
+ expect(node.value).toEqual('initial');
+ });
+
it('should support checkedLink', function() {
var container = document.createElement('div');
var link = new ReactLink(true, mocks.getMockFunction());
@@ -299,6 +343,28 @@ describe('ReactDOMInput', function() {
expect(link.requestChange.mock.calls[0][0]).toEqual(false);
});
+ it('should make checkbox input controlled with checkedLink', function() {
+ var CheckboxInput = React.createClass({
+ render: function () {
+ return (
+
+ );
+ }
+ });
+
+ var stub = ReactTestUtils.renderIntoDocument();
+ var node = stub.getDOMNode();
+
+ expect(node.checked).toBe(true);
+
+ node.checked = false;
+ ReactTestUtils.Simulate.change(node);
+
+ expect(node.checked).toEqual(true);
+ });
+
it('should warn with checked and no onChange handler', function() {
var oldWarn = console.warn;
try {