@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
101 lines (74 loc) • 2.85 kB
Markdown
---
title: 'useValueProps'
description: 'The `useValueProps` hook standardize handling of the value flow for a single consumer component representing one data point.'
version: 10.104.0
generatedAt: 2026-04-17T18:46:12.714Z
checksum: 090b7d977ba4be5e2c4c04d199a30a4048416c59f443a56985df2f80629d9c40
---
```tsx
import { useValueProps } from '@dnb/eufemia/extensions/forms'
// Use useValueProps
```
The `useValueProps` hook standardize handling of the value flow for a single consumer component representing one data point.
It also provides a way to transform the value.
This hook works perfectly together with [ValueBlock](/uilib/extensions/forms/create-component/ValueBlock/).
```tsx
import { useValueProps } from '@dnb/eufemia/extensions/forms'
const MyValueComponent = (props) => {
const { value, ...rest } = useValueProps(props)
return <ValueBlock {...rest}>{value}</ValueBlock>
}
render(<MyValueComponent path="/dataSelector" />)
```
All properties are optional and can be used as needed. These properties can be provided as part of your component properties.
- `value` the input value (string).
- `emptyValue` defines what value is considered to be empty. Defaults to `undefined`. But an empty string will also be validated when required is true.
- `path` the JSON pointer that defines the entry name/key in the data structure.
- `itemPath` similar to `path`, but is used when run inside the [Iterate](/uilib/extensions/forms/Iterate/) context.
### Return Parameters
It returns all of the given component properties, in addition to these:
- `value` the output value.
### Value transformers
The transformers are hooks to transform the value on different stages.
They should return a transformed value: `(value) => value`
- `toInput` transforms the value before it is returned. This applies whether the original source of the value is the value property or the data context.
- `fromExternal` transforms the provided `value` property before any other operations are performed.
In addition there are **value transformers** which should be used outside of the value component (by the value consumer):
- `transformIn` transforms the `value` before it's displayed in the value component.
## Demos
```tsx
const MyValueComponent = (props) => {
const preparedProps = {
label: 'Default Label',
...props,
toInput: (value) => value + 10,
}
const { value, ...rest } = useValueProps(preparedProps)
return (
<ValueBlock {...rest}>
{format(value, {
currency: true,
})}{' '}
kroner
</ValueBlock>
)
}
render(
<Form.Handler
data={{
myValue: 10,
}}
>
<MyValueComponent
label="Amount"
path="/myValue"
transformIn={(value) => value * 2}
/>
</Form.Handler>
)
```