【发布时间】:2019-02-03 08:58:20
【问题描述】:
我可能想错了,但我想有两个组件,一个父级和一个子级,其中子级有一个输入元素,用户需要在其中输入一个数字。父组件的回调只会在有效数字上被调用。这是通过 Typescript 和 parseFloat 强制执行的。
class Child extends React.Component {
state = { number: '' };
inputChanged = (ev) => {
const stringy = ev.target.value;
this.setState({number: stringy});
const parsed = parseFloat(stringy);
if (parsed) {
this.props.numberChanged(parsed);
}
}
render() {
return <input
type="text"
value={this.props.number || this.state.number}
onChange={this.inputChanged}
/>
}
}
class Container extends React.Component {
state = { number: 5 };
numberSet = (value: number) => {
this.setState({number: value});
}
render() {
return <Child
number={this.state.number}
numberChanged={this.numberSet}
/>;
}
}
挑战在于我希望能够使用道具设置和更改子组件中的数值。但我也想让用户输入数字。
如果我只依赖道具而不是陈述,那么当他们输入小数点之类的东西时,它们不会显示出来,因为从parseFloat 的角度来看它们是无效的。但是如果我只依赖状态,那么我似乎无法让父组件用新的道具更新子组件。
我也创建了以下CodePen 来重现。请注意您无法在输入字段中键入小数点。我哪里错了?
【问题讨论】:
-
This is enforced via Typescript and parseFloat- TypeScript 一旦运行就不会影响你的代码。...decimal points they do not show up because they are invalid from the perspective of parseFloat- 什么? -
@ethane 可能“强制”是错误的词选择,但我想要表达的是我希望我的上游状态只处理数字,而不是字符串。子组件使用 parseFloat 从输入值进行转换
标签: reactjs typescript