Skip to content

Commit bfcad96

Browse files
committed
Warn when accessing .props, .setProps on DOM components
1 parent ba81b60 commit bfcad96

14 files changed

Lines changed: 324 additions & 151 deletions

src/isomorphic/children/__tests__/sliceChildren-test.js

Lines changed: 6 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,16 @@ describe('sliceChildren', function() {
1515

1616
var React;
1717
var ReactFragment;
18-
var ReactTestUtils;
1918

2019
var sliceChildren;
21-
var reactComponentExpect;
22-
23-
var Partial;
2420

2521
beforeEach(function() {
2622
React = require('React');
2723
ReactFragment = require('ReactFragment');
28-
ReactTestUtils = require('ReactTestUtils');
2924

3025
sliceChildren = require('sliceChildren');
31-
reactComponentExpect = require('reactComponentExpect');
32-
33-
Partial = React.createClass({
34-
render: function() {
35-
return (
36-
<div>
37-
{sliceChildren(
38-
this.props.children,
39-
this.props.start,
40-
this.props.end
41-
)}
42-
</div>
43-
);
44-
},
45-
});
4626
});
4727

48-
function renderAndSlice(set, start, end) {
49-
var instance = <Partial start={start} end={end}>{set}</Partial>;
50-
instance = ReactTestUtils.renderIntoDocument(instance);
51-
var rendered = reactComponentExpect(instance)
52-
.expectRenderedChild()
53-
.instance();
54-
return rendered.props.children;
55-
}
56-
5728
function testKeyValuePairs(children, expectedPairs) {
5829
var obj = ReactFragment.extract(children);
5930
expect(obj).toEqual(expectedPairs);
@@ -65,7 +36,7 @@ describe('sliceChildren', function() {
6536
<div key="B" />,
6637
<div key="C" />,
6738
];
68-
var children = renderAndSlice(fullSet, 0);
39+
var children = sliceChildren(fullSet, 0);
6940
testKeyValuePairs(children, {
7041
'.$A': fullSet[0],
7142
'.$B': fullSet[1],
@@ -79,7 +50,7 @@ describe('sliceChildren', function() {
7950
<div key="B" />,
8051
<div key="C" />,
8152
];
82-
var children = renderAndSlice(fullSet, 1);
53+
var children = sliceChildren(fullSet, 1);
8354
testKeyValuePairs(children, {
8455
'.$B': fullSet[1],
8556
'.$C': fullSet[2],
@@ -93,7 +64,7 @@ describe('sliceChildren', function() {
9364
<div key="C" />,
9465
<div key="D" />,
9566
];
96-
var children = renderAndSlice(fullSet, 1, 2);
67+
var children = sliceChildren(fullSet, 1, 2);
9768
testKeyValuePairs(children, {
9869
'.$B': fullSet[1],
9970
});
@@ -104,13 +75,9 @@ describe('sliceChildren', function() {
10475
var b = <div />;
10576
var c = <div />;
10677

107-
var instance = <Partial start={1} end={2}>{a}{b}{c}</Partial>;
108-
instance = ReactTestUtils.renderIntoDocument(instance);
109-
var rendered = reactComponentExpect(instance)
110-
.expectRenderedChild()
111-
.instance();
112-
113-
testKeyValuePairs(rendered.props.children, {
78+
var el = <div>{a}{b}{c}</div>;
79+
var children = sliceChildren(el.props.children, 1, 2);
80+
testKeyValuePairs(children, {
11481
'.1': b,
11582
});
11683
});

src/renderers/dom/client/__tests__/ReactDOM-test.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,32 +79,32 @@ describe('ReactDOM', function() {
7979
</div>
8080
);
8181
// Warm the cache with theDog
82-
myDiv.setProps({
83-
children: [
82+
myDiv = ReactTestUtils.renderIntoDocument(
83+
<div>
8484
<div key="theDog" className="dogbeforedelete" />,
8585
<div key="theBird" className="bird" />,
86-
],
87-
});
86+
</div>
87+
);
8888
// Remove theDog - this should purge the cache
89-
myDiv.setProps({
90-
children: [
89+
myDiv = ReactTestUtils.renderIntoDocument(
90+
<div>
9191
<div key="theBird" className="bird" />,
92-
],
93-
});
92+
</div>
93+
);
9494
// Now, put theDog back. It's now a different DOM node.
95-
myDiv.setProps({
96-
children: [
95+
myDiv = ReactTestUtils.renderIntoDocument(
96+
<div>
9797
<div key="theDog" className="dog" />,
9898
<div key="theBird" className="bird" />,
99-
],
100-
});
99+
</div>
100+
);
101101
// Change the className of theDog. It will use the same element
102-
myDiv.setProps({
103-
children: [
102+
myDiv = ReactTestUtils.renderIntoDocument(
103+
<div>
104104
<div key="theDog" className="bigdog" />,
105105
<div key="theBird" className="bird" />,
106-
],
107-
});
106+
</div>
107+
);
108108
var root = React.findDOMNode(myDiv);
109109
var dog = root.childNodes[0];
110110
expect(dog.className).toBe('bigdog');

src/renderers/dom/client/wrappers/__tests__/ReactDOMButton-test.js

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,27 +53,41 @@ describe('ReactDOMButton', function() {
5353
});
5454

5555
it('should forward clicks when it becomes not disabled', function() {
56-
var btn = mounted(<button disabled={true} onClick={onClick} />);
57-
btn.setProps({disabled: false});
56+
var container = document.createElement('div');
57+
var btn = React.render(
58+
<button disabled={true} onClick={onClick} />,
59+
container
60+
);
61+
btn = React.render(
62+
<button onClick={onClick} />,
63+
container
64+
);
5865
expectClickThru(btn);
5966
});
6067

6168
it('should not forward clicks when it becomes disabled', function() {
62-
var btn = mounted(<button onClick={onClick} />);
63-
btn.setProps({disabled: true});
69+
var container = document.createElement('div');
70+
var btn = React.render(
71+
<button onClick={onClick} />,
72+
container
73+
);
74+
btn = React.render(
75+
<button disabled={true} onClick={onClick} />,
76+
container
77+
);
6478
expectNoClickThru(btn);
6579
});
6680

6781
it('should work correctly if the listener is changed', function() {
68-
var btn = mounted(
69-
<button disabled={true} onClick={function() {}} />
82+
var container = document.createElement('div');
83+
var btn = React.render(
84+
<button disabled={true} onClick={function() {}} />,
85+
container
86+
);
87+
btn = React.render(
88+
<button disabled={false} onClick={onClick} />,
89+
container
7090
);
71-
72-
btn.setProps({
73-
disabled: false,
74-
onClick: onClick,
75-
});
76-
7791
expectClickThru(btn);
7892
});
7993
});

src/renderers/dom/client/wrappers/__tests__/ReactDOMInput-test.js

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,30 +75,39 @@ describe('ReactDOMInput', function() {
7575
});
7676

7777
it('should allow setting `value` to `true`', function() {
78+
var container = document.createElement('div');
7879
var stub = <input type="text" value="yolo" onChange={emptyFunction} />;
79-
stub = ReactTestUtils.renderIntoDocument(stub);
80+
stub = React.render(stub, container);
8081
var node = React.findDOMNode(stub);
8182

8283
expect(node.value).toBe('yolo');
8384

84-
stub.replaceProps({value: true, onChange: emptyFunction});
85+
stub = React.render(
86+
<input type="text" value={true} onChange={emptyFunction} />,
87+
container
88+
);
8589
expect(node.value).toEqual('true');
8690
});
8791

8892
it('should allow setting `value` to `false`', function() {
93+
var container = document.createElement('div');
8994
var stub = <input type="text" value="yolo" onChange={emptyFunction} />;
90-
stub = ReactTestUtils.renderIntoDocument(stub);
95+
stub = React.render(stub, container);
9196
var node = React.findDOMNode(stub);
9297

9398
expect(node.value).toBe('yolo');
9499

95-
stub.replaceProps({value: false});
100+
stub = React.render(
101+
<input type="text" value={false} onChange={emptyFunction} />,
102+
container
103+
);
96104
expect(node.value).toEqual('false');
97105
});
98106

99107
it('should allow setting `value` to `objToString`', function() {
108+
var container = document.createElement('div');
100109
var stub = <input type="text" value="foo" onChange={emptyFunction} />;
101-
stub = ReactTestUtils.renderIntoDocument(stub);
110+
stub = React.render(stub, container);
102111
var node = React.findDOMNode(stub);
103112

104113
expect(node.value).toBe('foo');
@@ -108,8 +117,10 @@ describe('ReactDOMInput', function() {
108117
return 'foobar';
109118
},
110119
};
111-
112-
stub.replaceProps({value: objToString, onChange: emptyFunction});
120+
stub = React.render(
121+
<input type="text" value={objToString} onChange={emptyFunction} />,
122+
container
123+
);
113124
expect(node.value).toEqual('foobar');
114125
});
115126

0 commit comments

Comments
 (0)