You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					105 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					105 lines
				
				2.3 KiB
			| 
											3 years ago
										 | # `react-is`
 | ||
|  | 
 | ||
|  | This package allows you to test arbitrary values and see if they're a particular React element type. | ||
|  | 
 | ||
|  | ## Installation
 | ||
|  | 
 | ||
|  | ```sh | ||
|  | # Yarn
 | ||
|  | yarn add react-is | ||
|  | 
 | ||
|  | # NPM
 | ||
|  | npm install react-is | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Usage
 | ||
|  | 
 | ||
|  | ### Determining if a Component is Valid
 | ||
|  | 
 | ||
|  | ```js | ||
|  | import React from "react"; | ||
|  | import * as ReactIs from "react-is"; | ||
|  | 
 | ||
|  | class ClassComponent extends React.Component { | ||
|  |   render() { | ||
|  |     return React.createElement("div"); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | const FunctionComponent = () => React.createElement("div"); | ||
|  | 
 | ||
|  | const ForwardRefComponent = React.forwardRef((props, ref) => | ||
|  |   React.createElement(Component, { forwardedRef: ref, ...props }) | ||
|  | ); | ||
|  | 
 | ||
|  | const Context = React.createContext(false); | ||
|  | 
 | ||
|  | ReactIs.isValidElementType("div"); // true | ||
|  | ReactIs.isValidElementType(ClassComponent); // true | ||
|  | ReactIs.isValidElementType(FunctionComponent); // true | ||
|  | ReactIs.isValidElementType(ForwardRefComponent); // true | ||
|  | ReactIs.isValidElementType(Context.Provider); // true | ||
|  | ReactIs.isValidElementType(Context.Consumer); // true | ||
|  | ReactIs.isValidElementType(React.createFactory("div")); // true | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Determining an Element's Type
 | ||
|  | 
 | ||
|  | #### Context
 | ||
|  | 
 | ||
|  | ```js | ||
|  | import React from "react"; | ||
|  | import * as ReactIs from 'react-is'; | ||
|  | 
 | ||
|  | const ThemeContext = React.createContext("blue"); | ||
|  | 
 | ||
|  | ReactIs.isContextConsumer(<ThemeContext.Consumer />); // true | ||
|  | ReactIs.isContextProvider(<ThemeContext.Provider />); // true | ||
|  | ReactIs.typeOf(<ThemeContext.Provider />) === ReactIs.ContextProvider; // true | ||
|  | ReactIs.typeOf(<ThemeContext.Consumer />) === ReactIs.ContextConsumer; // true | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Element
 | ||
|  | 
 | ||
|  | ```js | ||
|  | import React from "react"; | ||
|  | import * as ReactIs from 'react-is'; | ||
|  | 
 | ||
|  | ReactIs.isElement(<div />); // true | ||
|  | ReactIs.typeOf(<div />) === ReactIs.Element; // true | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Fragment
 | ||
|  | 
 | ||
|  | ```js | ||
|  | import React from "react"; | ||
|  | import * as ReactIs from 'react-is'; | ||
|  | 
 | ||
|  | ReactIs.isFragment(<></>); // true | ||
|  | ReactIs.typeOf(<></>) === ReactIs.Fragment; // true | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Portal
 | ||
|  | 
 | ||
|  | ```js | ||
|  | import React from "react"; | ||
|  | import ReactDOM from "react-dom"; | ||
|  | import * as ReactIs from 'react-is'; | ||
|  | 
 | ||
|  | const div = document.createElement("div"); | ||
|  | const portal = ReactDOM.createPortal(<div />, div); | ||
|  | 
 | ||
|  | ReactIs.isPortal(portal); // true | ||
|  | ReactIs.typeOf(portal) === ReactIs.Portal; // true | ||
|  | ``` | ||
|  | 
 | ||
|  | #### StrictMode
 | ||
|  | 
 | ||
|  | ```js | ||
|  | import React from "react"; | ||
|  | import * as ReactIs from 'react-is'; | ||
|  | 
 | ||
|  | ReactIs.isStrictMode(<React.StrictMode />); // true | ||
|  | ReactIs.typeOf(<React.StrictMode />) === ReactIs.StrictMode; // true | ||
|  | ``` |