|
1 | 1 | # `react-is` |
2 | 2 |
|
3 | | -**NOTE:** This README is copied directly from React upstream. |
| 3 | +**NOTE:** This README is copied directly from React upstream and transpiled to Lua. |
4 | 4 |
|
5 | 5 | This package allows you to test arbitrary values and see if they're a particular React element type. |
6 | 6 |
|
7 | | -## Installation |
8 | | - |
9 | | -```sh |
10 | | -# Yarn |
11 | | -yarn add react-is |
12 | | - |
13 | | -# NPM |
14 | | -npm install react-is |
15 | | -``` |
16 | | - |
17 | 7 | ## Usage |
18 | 8 |
|
19 | 9 | ### Determining if a Component is Valid |
20 | 10 |
|
21 | | -```js |
22 | | -import React from "react"; |
23 | | -import * as ReactIs from "react-is"; |
| 11 | +```lua |
| 12 | +local ReplicatedStorage = game:GetService("ReplicatedStorage") |
| 13 | +local React = require(ReplicatedStorage.Packages.React) |
| 14 | +local ReactIs = require(ReplicatedStorage.Packages.ReactIs) |
| 15 | + |
| 16 | +local ClassComponent = React.Component:extend("ClassComponent") |
24 | 17 |
|
25 | | -class ClassComponent extends React.Component { |
26 | | - render() { |
27 | | - return React.createElement("div"); |
28 | | - } |
29 | | -} |
| 18 | +function ClassComponent:render() |
| 19 | + return React.createElement("Frame") |
| 20 | +end |
30 | 21 |
|
31 | | -const FunctionComponent = () => React.createElement("div"); |
| 22 | +local function FunctionComponent() |
| 23 | + return React.createElement("Frame") |
| 24 | +end |
32 | 25 |
|
33 | | -const ForwardRefComponent = React.forwardRef((props, ref) => |
34 | | - React.createElement(Component, { forwardedRef: ref, ...props }) |
35 | | -); |
| 26 | +local ForwardRefComponent = React.forwardRef(function(props, ref) |
| 27 | + return React.createElement(FunctionComponent, { |
| 28 | + forwardRef = ref, |
| 29 | + }) |
| 30 | +end) |
36 | 31 |
|
37 | | -const Context = React.createContext(false); |
| 32 | +local Context = React.createContext(false) |
38 | 33 |
|
39 | | -ReactIs.isValidElementType("div"); // true |
40 | | -ReactIs.isValidElementType(ClassComponent); // true |
41 | | -ReactIs.isValidElementType(FunctionComponent); // true |
42 | | -ReactIs.isValidElementType(ForwardRefComponent); // true |
43 | | -ReactIs.isValidElementType(Context.Provider); // true |
44 | | -ReactIs.isValidElementType(Context.Consumer); // true |
45 | | -ReactIs.isValidElementType(React.createFactory("div")); // true |
| 34 | +ReactIs.isValidElementType("Frame") -- true |
| 35 | +ReactIs.isValidElementType(ClassComponent) -- true |
| 36 | +ReactIs.isValidElementType(FunctionComponent) -- true |
| 37 | +ReactIs.isValidElementType(ForwardRefComponent) -- true |
| 38 | +ReactIs.isValidElementType(Context.Provider) -- true |
| 39 | +ReactIs.isValidElementType(Context.Consumer) -- true |
46 | 40 | ``` |
47 | 41 |
|
48 | 42 | ### Determining an Element's Type |
49 | 43 |
|
50 | 44 | #### Context |
51 | 45 |
|
52 | | -```js |
53 | | -import React from "react"; |
54 | | -import * as ReactIs from 'react-is'; |
| 46 | +```lua |
| 47 | +local ReplicatedStorage = game:GetService("ReplicatedStorage") |
| 48 | +local React = require(ReplicatedStorage.Packages.React) |
| 49 | +local ReactIs = require(ReplicatedStorage.Packages.ReactIs) |
55 | 50 |
|
56 | | -const ThemeContext = React.createContext("blue"); |
| 51 | +local ThemeContext = React.createContext("blue") |
57 | 52 |
|
58 | | -ReactIs.isContextConsumer(<ThemeContext.Consumer />); // true |
59 | | -ReactIs.isContextProvider(<ThemeContext.Provider />); // true |
60 | | -ReactIs.typeOf(<ThemeContext.Provider />) === ReactIs.ContextProvider; // true |
61 | | -ReactIs.typeOf(<ThemeContext.Consumer />) === ReactIs.ContextConsumer; // true |
| 53 | +ReactIs.isContextConsumer(React.createElement(ThemeContext.Consumer)) -- true |
| 54 | +ReactIs.isContextProvider(React.createElement(ThemeContext.Provider)) -- true |
| 55 | +ReactIs.typeOf(React.createElement(ThemeContext.Provider)) == ReactIs.ContextProvider -- true |
| 56 | +ReactIs.typeOf(React.createElement(ThemeContext.Consumer)) == ReactIs.ContextConsumer -- true |
62 | 57 | ``` |
63 | 58 |
|
64 | 59 | #### Element |
65 | 60 |
|
66 | | -```js |
67 | | -import React from "react"; |
68 | | -import * as ReactIs from 'react-is'; |
| 61 | +```lua |
| 62 | +local ReplicatedStorage = game:GetService("ReplicatedStorage") |
| 63 | +local React = require(ReplicatedStorage.Packages.React) |
| 64 | +local ReactIs = require(ReplicatedStorage.Packages.ReactIs) |
69 | 65 |
|
70 | | -ReactIs.isElement(<div />); // true |
71 | | -ReactIs.typeOf(<div />) === ReactIs.Element; // true |
| 66 | +ReactIs.isElement(React.createElement("Frame")) -- true |
| 67 | +ReactIs.typeOf(React.createElement("Frame")) == ReactIs.Element -- true |
72 | 68 | ``` |
73 | 69 |
|
74 | 70 | #### Fragment |
75 | 71 |
|
76 | | -```js |
77 | | -import React from "react"; |
78 | | -import * as ReactIs from 'react-is'; |
| 72 | +```lua |
| 73 | +local ReplicatedStorage = game:GetService("ReplicatedStorage") |
| 74 | +local React = require(ReplicatedStorage.Packages.React) |
| 75 | +local ReactIs = require(ReplicatedStorage.Packages.ReactIs) |
79 | 76 |
|
80 | | -ReactIs.isFragment(<></>); // true |
81 | | -ReactIs.typeOf(<></>) === ReactIs.Fragment; // true |
| 77 | +ReactIs.isFragment(React.createElement(React.Fragment)) -- true |
| 78 | +ReactIs.typeOf(React.createElement(React.Fragment)) == ReactIs.Fragment -- true |
82 | 79 | ``` |
83 | 80 |
|
84 | 81 | #### Portal |
85 | 82 |
|
86 | | -```js |
87 | | -import React from "react"; |
88 | | -import ReactDOM from "react-dom"; |
89 | | -import * as ReactIs from 'react-is'; |
| 83 | +```lua |
| 84 | +local ReplicatedStorage = game:GetService("ReplicatedStorage") |
| 85 | +local React = require(ReplicatedStorage.Packages.React) |
| 86 | +local ReactRoblox = require(ReplicatedStorage.Packages.ReactRoblox) |
| 87 | +local ReactIs = require(ReplicatedStorage.Packages.ReactIs) |
90 | 88 |
|
91 | | -const div = document.createElement("div"); |
92 | | -const portal = ReactDOM.createPortal(<div />, div); |
| 89 | +local container = Instance.new("Folder") |
| 90 | +local portal = ReactRoblox.createPortal(React.createElement("Frame"), container) |
93 | 91 |
|
94 | | -ReactIs.isPortal(portal); // true |
95 | | -ReactIs.typeOf(portal) === ReactIs.Portal; // true |
| 92 | +ReactIs.isPortal(portal) -- true |
| 93 | +ReactIs.typeOf(portal) == ReactIs.Portal -- true |
96 | 94 | ``` |
97 | 95 |
|
98 | 96 | #### StrictMode |
99 | 97 |
|
100 | | -```js |
101 | | -import React from "react"; |
102 | | -import * as ReactIs from 'react-is'; |
| 98 | +```lua |
| 99 | +local ReplicatedStorage = game:GetService("ReplicatedStorage") |
| 100 | +local React = require(ReplicatedStorage.Packages.React) |
| 101 | +local ReactIs = require(ReplicatedStorage.Packages.ReactIs) |
103 | 102 |
|
104 | | -ReactIs.isStrictMode(<React.StrictMode />); // true |
105 | | -ReactIs.typeOf(<React.StrictMode />) === ReactIs.StrictMode; // true |
| 103 | +ReactIs.isStrictMode(React.createElement(React.StrictMode)) -- true |
| 104 | +ReactIs.typeOf(React.createElement(React.StrictMode)) == ReactIs.StrictMode -- true |
106 | 105 | ``` |
0 commit comments