Мне нужно отформатировать входное значение, чтобы использовать маску для валюты BRL.
Вот мой вклад
<InputAnimation
required
type = {"number"}
placeholder = {" "}
label = {"Valor"}
onChange = {event=>setValue(event.target.valueAsNumber)}
value = {value}
/>
Я перепробовал множество руководств, однако в большинстве из них показано, как это сделать в jQuery или JS, и это не очень хорошо работает для React+Typescript.






Чтобы отформатировать входное значение для использования маски для валюты BRL в React с Typescript, вы можете использовать такой пакет, как react-number-format или react-currency-format. Вот пример того, как вы можете использовать react-number-format.
npm install react-number-format
import NumberFormat from 'react-number-format';
...
...
...
<NumberFormat
required
placeholder = {" "}
label = {"Valor"}
onValueChange = {(values) => {
const { value } = values;
setValue(value);
}}
value = {value}
thousandSeparator = {true}
prefix = {"R$ "}
decimalScale = {2}
/>
Вот как я это исправлял:
<Инпутанимация необходимый тип = {"текст"} заполнитель = {" "} label = {"Доблесть"} идентификатор = "ввод пользователя" onChange = {formatNumberToBRL} значение = {форматированное значение} />
И функция:
function formatNumberToBRL(event: React.ChangeEvent<HTMLInputElement>): void {
// Remove any non-numeric characters from the input
let userInput: string = event.target.value.replace(/[^0-9]/g, '');
if (userInput === '') {
// If the input is empty, set the formatted value to "R$ 0,00"
setFormattedValue('R$ 0,00');
setValue(0);
} else {
// Convert the input to a number and divide by 100 to get the value in BRL
let userInputAsNumber: number = parseInt(userInput, 10) / 100;
// Format the number as BRL currency
let formattedNumber: string = `R$ ${userInputAsNumber.toFixed(2).replace('.', ',').replace(/(\d)(?=(\d{3})+\,)/g, "$1.")}`;
// Update the state with the formatted value and the user input
setFormattedValue(formattedNumber);
setValue(userInputAsNumber);
}
}
Таким образом, нет необходимости в дополнительных компонентах или библиотеках.
Спасибо. Я пытался использовать десятичный разделитель в виде запятой вместо точки, но похоже, что это не поддерживается. Есть идеи?