当前位置: 首页 > 面试题库 >

在React中格式化数字时停止光标跳

翟弘
2023-03-14
问题内容

我的react组件上有一个输入字段,用于显示某项的价格(两个小数位和数千个分隔符)。我希望显示的值在组件首次呈现时以money格式显示,并且还应保留为用户在字段中键入时的money格式。

目前,我的组件中包含以下代码:

var React = require('react');
import accounting from 'accounting';

MoneyInput = React.createClass({
    propTypes: {
        name: React.PropTypes.string.isRequired,
        onChange: React.PropTypes.func.isRequired,
        value: React.PropTypes.number,
        error: React.PropTypes.string,
    },

    onChange(event) {
        // get rid of any money formatting
        event.target.value = accounting.unformat(event.target.value);

        // pass the value on
        this.props.onChange(event);
    },

    getValue() {
        return accounting.formatNumber(this.props.value, 2)
    },

    render() {

        return (
                <div className="field">
                    <input type="text"
                           name={this.props.name}
                           className="form-control"
                           value={this.getValue()}
                           onChange={this.onChange} />
                    <div className="input">{this.props.error}</div>
                </div>
        );
    }
});

module.exports = MoneyInput;

代码显示格式正确的数据,但是每次我输入一个值时,光标就会跳到数字的末尾。

我了解为什么会发生这种情况(我认为),并且我在这里阅读了几个有关不丢失JavaScript中光标位置的问题

我的问题是在React中解决此问题的最佳方法是什么?

我认为,理想情况下,我不想将光标位置存储在状态下(例如,我希望它们成为Dan Abramov语法中的Presentation
Components
),所以还有另一种方法吗?


问题答案:

嗨,在github.com
https://github.com/facebook/react/issues/955上对此问题进行了讨论,请参阅11月30日的评论

您可能还希望在输入组件上使用setstate。



 类似资料:
  • 我一直在寻找答案,但我似乎找不到任何原因来解释为什么这是一个问题。在我的样式表中,我在不同的地方使用来处理按钮和链接等UI元素。大多数时候,它都像我预期的那样工作,但有时他们只是不想工作。我想说,我在样式表中有一个特定的示例,可以确保复制,但这就是问题所在。当它发生时,它不仅仅是针对一个元素,而是针对所有元素。我在现代浏览器中全面体验过这种情况,它似乎完全是随机的,这使得很难进行故障排除。 我唯一

  • 好的,我已经在互联网上搜索了一下,试图弄清楚我必须在PhpStorm中更改哪一点才能让它停止这样做。 现在,当我在一些PHP上运行“重新格式化代码”时,它也决定为我优化导入。虽然通常我会说“哎呀,太好了”——在某些情况下,PhpStom并没有意识到它认为未使用的一些导入实际上已经使用过了。 注释作为代码等等。 请告诉我有人知道如何让PhpStom停止这样做。每当我自动格式化代码时,我都必须撤消对导

  • number(string $format): self string $format $config = [ 'path' => './tests' ]; ​ $fileObject = new \Vtiful\Kernel\Excel($config); ​ $fileObject = $fileObject->fileName('tutorial.xlsx'); $fileHan

  • 问题内容: 我想在我们的jsp页面中格式化一些数字。 首先,我定义了一些资源 ...... 问题1: 我想知道“#”和“ 0”的含义是什么? 0.00,#0.00,##。00,### 0.00 谁能告诉我它们之间的区别?谢谢! 问题2: 如果我在动作BigDecimal number1中定义了BigDecimal类型; 然后我的页面应该使用一种格式来显示此值, 请忽略number <0 问题3:

  • 问题内容: 我正在尝试格式化数字。例子: 它很常见,但是我不知道该使用哪个过滤器。 编辑:如果你有通用的Python方法可以执行此操作,那么很高兴在模型中添加一个格式化字段。 问题答案: Django的贡献人性化应用程序可以做到这一点: 确保将文件添加到列表中。

  • 问题内容: 我正在尝试在JSX内部使用pre标签。当您在JSX中使用pre标签时,它根本不格式化。为什么?为了使用pre标签,我需要执行以下操作: 为什么? 问题答案: 使用模板文字 模板文字允许使用多行字符串,以保留前导/尾随空格和换行符。