# useSignal() > * 如有錯誤處指正或任何建議,懇請留言,感謝! > * 搭配 ChatGPT 進行翻譯,請小心服用 > * ▸ ... 為英文原文 :::spoiler ... Use `useSignal()` to store any single value similar to `useStore()`. `useSignal` is heavely optimized when it comes to re-rendering components. It is able to skip re-renderings of parent components even when the signal itself is defined in the parent. `useSignal` works with all [primitve types](https://developer.mozilla.org/en-US/docs/Glossary/Primitive) as well as with not nested / flat objects. If you need to store arrays or complex objects use [useStore](https://qwik.builder.io/docs/components/state/) instead with the `{recursive: true}` option. Some examples would be: ``` const intStore = useSignal(0); const stringStore = useSignal('foo'); const booleanStore = useSignal(true); const objectStore = useSignal({fruite: 'apple', color: 'green'}); // DON'T DO THIS! const arrayStore = useSignal(['banana','oranges']); const nestedObjectStore = useSignal({ fruits: { banana: 10, apple: 5 }, vegetables: { tomato: 7, broccoli: 14 } ); ``` To read or update the values you can simple access the `value` property: ``` <> <button onClick$={() => intStore.value++}>Click me</button> <div>{intStore.value}</div> </> ``` It is also able to hold a reference of a DOM element created by the component. There are two parts to retrieving a DOM element reference: 1. `useSignal()` returns a store object that contains a `value` property which will eventually contain the reference. 2. `ref={_ref_variable_}` is a prop binding that will set the `value` property of the `ref` object to the DOM element. ### Example The example on the right uses `useSignal()` to get a reference to the `input` element. However, it is missing the `ref` prop binding. Add the `ref` prop binding to make the example work as expected. ::: ###### tags: `Lifecycle Hooks`