React 表单输入类型中的 PropType 错误
PropType error in React form input type
我正在使用 react.js 构建一个表单,但遇到了一个我似乎无法解决的问题。我在表单中为我的道具使用 npm 模块 prop-types
,并尝试为单个输入设置 inputType
。我不断收到以下错误:
我的代码是:
import React from 'react';
import PropTypes from 'prop-types';
const SingleInput = (props) => (
<div className="form-group">
<label className="form-label">{props.title}</label>
<input
className="form-input"
name={props.name}
type={props.inputType}
value={props.content}
onChange={props.controlFunc}
placeholder={props.placeholder} />
</div>
);
SingleInput.propTypes = {
inputType: React.PropTypes.oneOfType(['text', 'number']).isRequired,
title: React.PropTypes.string.isRequired,
name: React.PropTypes.string.isRequired,
controlFunc: React.PropTypes.func.isRequired,
content: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
]).isRequired,
placeholder: React.PropTypes.string,
};
export default SingleInput;
我在使用 oneOf
和 oneOfType
之间切换,但无论哪种方式都得到相同的结果。还有什么我应该做的吗?
非常感谢。
我相信你使用 React v16?您可以在他们的发行说明中看到他们从 react
包中删除了 PropTypes
。
The deprecations introduced in 15.x have been removed from the core
package. React.createClass is now available as create-react-class,
React.PropTypes as prop-types, React.DOM as react-dom-factories,
react-addons-test-utils as react-dom/test-utils, and shallow renderer
as react-test-renderer/shallow
您应该直接使用 prop-types
库:
SingleInput.propTypes = {
inputType: PropTypes.oneOfType(['text', 'number']).isRequired,
title: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
controlFunc: PropTypes.func.isRequired,
content: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
]).isRequired,
placeholder: PropTypes.string,
};
oneOfType
表示您希望变量是特定的 prop-type 之一,而 oneOf
可以是任何自选值。
这里有一个例子,两者看起来如何。
Game.propTypes = {
gameStatus: PropTypes.oneOf(['new_game', 'playing', 'finished']).isRequired,
roundsToPlay: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
}
我来这里是因为 <input type="number" />
元素有问题。我想将值作为道具,但每次用户删除默认值以输入新值时,我都会收到来自道具类型的警告。由于该值现在是一个空字符串,而不是任何给定的数字。解决方案是将 prop-type 设置为 oneOfTypes
以接受字符串和数字。
我希望我可以帮助那些在数字输入方面遇到同样问题的人提供这些附加信息。
我正在使用 react.js 构建一个表单,但遇到了一个我似乎无法解决的问题。我在表单中为我的道具使用 npm 模块 prop-types
,并尝试为单个输入设置 inputType
。我不断收到以下错误:
我的代码是:
import React from 'react';
import PropTypes from 'prop-types';
const SingleInput = (props) => (
<div className="form-group">
<label className="form-label">{props.title}</label>
<input
className="form-input"
name={props.name}
type={props.inputType}
value={props.content}
onChange={props.controlFunc}
placeholder={props.placeholder} />
</div>
);
SingleInput.propTypes = {
inputType: React.PropTypes.oneOfType(['text', 'number']).isRequired,
title: React.PropTypes.string.isRequired,
name: React.PropTypes.string.isRequired,
controlFunc: React.PropTypes.func.isRequired,
content: React.PropTypes.oneOfType([
React.PropTypes.string,
React.PropTypes.number,
]).isRequired,
placeholder: React.PropTypes.string,
};
export default SingleInput;
我在使用 oneOf
和 oneOfType
之间切换,但无论哪种方式都得到相同的结果。还有什么我应该做的吗?
非常感谢。
我相信你使用 React v16?您可以在他们的发行说明中看到他们从 react
包中删除了 PropTypes
。
The deprecations introduced in 15.x have been removed from the core package. React.createClass is now available as create-react-class, React.PropTypes as prop-types, React.DOM as react-dom-factories, react-addons-test-utils as react-dom/test-utils, and shallow renderer as react-test-renderer/shallow
您应该直接使用 prop-types
库:
SingleInput.propTypes = {
inputType: PropTypes.oneOfType(['text', 'number']).isRequired,
title: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
controlFunc: PropTypes.func.isRequired,
content: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
]).isRequired,
placeholder: PropTypes.string,
};
oneOfType
表示您希望变量是特定的 prop-type 之一,而 oneOf
可以是任何自选值。
这里有一个例子,两者看起来如何。
Game.propTypes = {
gameStatus: PropTypes.oneOf(['new_game', 'playing', 'finished']).isRequired,
roundsToPlay: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
}
我来这里是因为 <input type="number" />
元素有问题。我想将值作为道具,但每次用户删除默认值以输入新值时,我都会收到来自道具类型的警告。由于该值现在是一个空字符串,而不是任何给定的数字。解决方案是将 prop-type 设置为 oneOfTypes
以接受字符串和数字。
我希望我可以帮助那些在数字输入方面遇到同样问题的人提供这些附加信息。