Do you have an awesome Svelte 3 component you would like to use within your React app? If so, you've come to the right place!
yarn add react-svelte3-adapter
or
npm install --save react-svelte3-adapter
import React, {useState} from 'react';
import SvelteAdapter from 'react-svelte3-adapter';
import SomeSvelte3Component from 'some-svelte3-library';
export function MyReactComponent() {
const [name, setName] = useState('World');
return (
<React.Fragment>
<input type='text' value={name} onChange={(e) => setName(e.target.value)}/>
{/*Any change in name will be passed to the svelte component*/}
{/*Every time the svelte component emits an event with the name "someevent" the function will be called */}
<SvelteAdapter
svelteComponent={SomeSvelte3Component}
data={{name}}
listeners={{someevent: (e) => alert(JSON.stringify(e.detail))}}
/>
</React.Fragment>
);
}
SvelteAdapter.propTypes = {
/** The svelte component to wrap. Doesn't change after initialization.
* Needs to be compiled with the 'generate:dom' option (which is the svelte default).
*/
svelteComponent: PropTypes.func.isRequired,
/** Passed into the svelte component as props. */
data: PropTypes.object.isRequired,
/** An object that maps event-names to handler functions.
* When the svelte component emits the event, the handler will be called.
*/
listeners: PropTypes.objectOf(PropTypes.func),
/** A class to add to the div that the svelte component mounts to (a.k.a it's container).*/
containerClass: PropTypes.string,
/** Inline containerStyles to add to the div that the svelte component mounts to (a.k.a it's container).*/
containerStyles: PropTypes.objectOf(PropTypes.string)
};
generate:dom
).