Skip to content

Commit f834a56

Browse files
authored
Merge pull request #242 from cleandart/CPLAT-9057-strictmode
CPLAT-9057: Implement StrictMode Component
2 parents 80c592d + 2481e21 commit f834a56

File tree

4 files changed

+62
-3
lines changed

4 files changed

+62
-3
lines changed

lib/react.dart

+7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ typedef ReactDartComponentFactoryProxy2 ComponentRegistrar2(
3535
/// See: <https://reactjs.org/docs/fragments.html>
3636
var Fragment = ReactJsComponentFactoryProxy(React.Fragment);
3737

38+
/// StrictMode is a tool for highlighting potential problems in an application.
39+
///
40+
/// StrictMode does not render any visible UI. It activates additional checks and warnings for its descendants.
41+
///
42+
/// See: <https://reactjs.org/docs/strict-mode.html>
43+
var StrictMode = ReactJsComponentFactoryProxy(React.StrictMode);
44+
3845
/// Top-level ReactJS [Component class](https://facebook.github.io/react/docs/react-component.html)
3946
/// which provides the [ReactJS Component API](https://facebook.github.io/react/docs/react-component.html#reference)
4047
///

lib/react_client/react_interop.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ abstract class React {
3636
@Deprecated('6.0.0')
3737
external static ReactClass createClass(ReactClassConfig reactClassConfig);
3838
external static ReactJsComponentFactory createFactory(type);
39-
4039
external static ReactElement createElement(dynamic type, props, [dynamic children]);
40+
external static JsRef createRef();
4141

4242
external static bool isValidElement(dynamic object);
43-
external static ReactClass get Fragment;
4443

45-
external static JsRef createRef();
44+
external static ReactClass get StrictMode;
45+
external static ReactClass get Fragment;
4646
}
4747

4848
/// Creates a [Ref] object that can be attached to a [ReactElement] via the ref prop.

test/react_strictmode_test.dart

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
@TestOn('browser')
2+
@JS()
3+
library react_test_utils_test;
4+
5+
import 'dart:html';
6+
7+
import 'package:js/js.dart';
8+
import 'package:react/react.dart' as react;
9+
import 'package:react/react_dom.dart' as react_dom;
10+
import 'package:test/test.dart';
11+
import 'package:react/react_client.dart';
12+
13+
main() {
14+
setClientConfiguration();
15+
16+
group('StrictMode', () {
17+
test('renders nothing but its children', () {
18+
var wrappingDivRef;
19+
20+
react_dom.render(
21+
react.div({
22+
'ref': (ref) {
23+
wrappingDivRef = ref;
24+
}
25+
}, [
26+
react.StrictMode({}, [
27+
react.div({}),
28+
react.div({}),
29+
react.div({}),
30+
react.div({}),
31+
])
32+
]),
33+
new Element.div(),
34+
);
35+
36+
expect(wrappingDivRef.children, hasLength(4));
37+
});
38+
});
39+
}

test/react_strictmode_test.html

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head lang="en">
4+
<meta charset="UTF-8">
5+
<title></title>
6+
<script src="packages/react/react_with_addons.js"></script>
7+
<script src="packages/react/react_dom.js"></script>
8+
<link rel="x-dart-test" href="react_strictmode_test.dart">
9+
<script src="packages/test/dart.js"></script>
10+
</head>
11+
<body>
12+
</body>
13+
</html>

0 commit comments

Comments
 (0)