Use TypeScript TSX without React
Love the efficiency of TypeScript TSX syntax, but you have a small project that doesn't use React? This library may help.
First, set your tsconfig.json
file with these settings:
{
"compilerOptions": {
"jsx": "react",
"jsxFactory": "createElement"
}
}
Then create a file with the .tsx extension:
//yourcomponent.tsx
import { createElement, StatelessProps } from 'tsx-create-element';
interface YourProps {
yourText: string;
}
export const YourComponent = (props: StatelessProps<YourProps>) => {
return <div>{props.yourText}</div>;
}
This is analogous to ReactDOM.render. Typically your app will only mount
one component which contains your entire tree. You will need to call mount
anytime your props change. No React = no virtual DOM.
import { createElement, mount } from 'tsx-create-element';
import { YourComponent } from './yourcomponent';
mount(YourComponent({yourText:"hello world"}), document.getElementById('your-div-ID'));
See the test folder for an example of component composition.
- This will only render stateless components. No React = no React lifecycle.
- Everytime
mount
is called, the DOM subtree is obliterated. You may lose state in stateful elements such as textboxes. You will need to manage this yourself, prior to callingmount
. - You may also lose focus when
mount
is called. There is a simplistic heuristic which tries to map the position of the activeElement. - A technique for maintaining stateful textboxes is found in test/index.tsx.
To see the test page, run:
npm start