--- title: API reference --- ## TODO MAKE THIS CURRENT, INCLUDE svelte, svelte/store, ETC ETC As we saw above, you create a component instance with the `new` keyword: ```js /* { filename: 'main.js' } */ import App from './App.html'; const component = new App({ // `target` is the only required option. This is the // DOM element your component will be appended to target: document.querySelector('main'), // `anchor` is optional. // The component is inserted immediately before this // DOM element, which must be a child of `target` anchor: document.querySelector('main #child'), // `props` is optional. A component can also have // default props – we'll learn about that later. props: { questions: [ 'life', 'the universe', 'everything' ], answer: 42 } }); ``` Normally, you'd interact with a component by getting and setting *props*: ```js console.log(component.answer); // 42 component.answer = 420; ``` Every Svelte component instance has three built-in methods: ### component.$set(props) This updates the component's state with the new values provided and causes the DOM to update. `state` must be a plain old JavaScript object (POJO). Any properties *not* included in `state` will remain as they were. ```js component.set({ questions: [ 'why is the sky blue?', 'how do planes fly?', 'where do babies come from?' ], answer: 'ask your mother' }); ``` ### component.get() Returns the component's current state: ```js const { questions, answer } = component.get(); console.log(answer); // 'ask your mother' ``` This will also retrieve the value of [computed properties](docs#computed-properties). > Previous versions of Svelte allowed you to specify a key to retrieve a specific value — this was removed in version 2. ### component.on(eventName, callback) Allows you to respond to *events*: ```js const listener = component.on('thingHappened', event => { console.log(`A thing happened: ${event.thing}`); }); // some time later... listener.cancel(); ``` Each component has three built-in events, corresponding to their [lifecycle hooks](docs#lifecycle-hooks): ```js component.on('state', ({ changed, current, previous }) => { console.log('state changed', current); }); component.on('update', ({ changed, current, previous }) => { console.log('DOM updated after state change', current); }); component.on('destroy', () => { console.log('this component is being destroyed'); }); ``` ### component.fire(eventName, event) The companion to `component.on(...)`: ```js component.fire('thingHappened', { thing: 'this event was fired' }); ``` At first glance `component.on(...)` and `component.fire(...)` aren't particularly useful, but it'll become more so when we learn about [nested components](docs#nested-components) and [component events](docs#component-events). ### component.destroy() Removes the component from the DOM and removes any event listeners that were created. This will also fire a `destroy` event: ```js component.on('destroy', () => { alert('goodbye!'); // please don't do this }); component.destroy(); ``` ### component.options The options used to instantiate the component are available in `component.options`. ```html Check the console. ``` This gives you access to standard options like `target` and `data`, but can also be used to access any other custom options you may choose to implement for your component. ### component.root In [nested components](docs#nested-components), each component has a `root` property pointing to the top-level root component – that is, the one instantiated with `new MyComponent({...})`. > Earlier versions of Svelte had a `component.observe(...)` method. This was removed in version 2, in favour of the `onstate` [lifecycle hook](docs#lifecycle-hooks), but is still available via [svelte-extras](https://github.com/sveltejs/svelte-extras).