【发布时间】:2019-12-10 14:46:56
【问题描述】:
我正在尝试将 react 项目转换为 TypeScript。下面的代码是一个输入字段,用于计算输入的字符数。
在 renderCharactersLeft 函数中出现以下错误:
这并不让我感到惊讶,因为默认状态 'charsLeft' 设置为 null,但我想知道您将如何绕过或在 TypeScript 中解决此消息?
import React from "react";
interface CharCountInputProps {
value: string;
type: string;
name: string;
maxChars: number;
onChange: any;
}
interface CharCountInputState {}
class CharCountInput extends React.Component<
CharCountInputProps,
CharCountInputState
> {
state = {
charsLeft: null
};
componentDidMount() {
this.handleCharCount(this.props.value);
}
handleCharCount = (value: string) => {
console.log(value);
const { maxChars } = this.props;
const charCount = value.length;
const charsLeft = maxChars - charCount;
this.setState({ charsLeft });
};
changeHandler = (event: React.ChangeEvent<HTMLInputElement>) => {
this.setState({ [event.target.name]: event.target.value } as Pick<
CharCountInputState,
keyof CharCountInputState
>);
this.handleCharCount(event.target.value);
this.props.onChange(event);
};
renderCharactersLeft = () => {
const { charsLeft } = this.state;
let content;
if (charsLeft >= 0) {
content = <span>{`characters left: ${charsLeft}`}</span>;
} else if (charsLeft != null && charsLeft < 0) {
const string = charsLeft.toString().substring(1);
content = <span>{`too many characters: ${string}`}</span>;
} else {
content = null;
}
return content;
};
render() {
const { value, type, name } = this.props;
return (
<>
<input
onChange={this.changeHandler}
value={value}
type={type}
name={name}
/>
{this.renderCharactersLeft()}
</>
);
}
}
export default CharCountInput;
【问题讨论】:
-
你不能做类似
charsLeft && charsLeft >= 0的事情 -
嗯,是的,我试过了。然后我在 && (charsLeft >= 0) 之后的下一个 charsLeft 上得到错误
-
charsLeft初始状态为空的原因是什么?0的初始状态是否更合适? -
添加该行时出现什么错误?
-
是否需要
null?你不能把它设置为this.props.maxChars吗?
标签: javascript reactjs typescript