React Marquee 模块给出错误
React Marquee module giving error
在反应中使用 react-text-marquee module 时,Chrome 开发工具控制台出现错误。
我不确定如何在不将输出更改为字符串而不是 JSX 的情况下解决此问题。
我应该澄清一下,该页面的功能实际上是正确的,但是最好能消除错误,以防它们导致后续问题。
这是 chrome 控制台错误:
09:43:29.747 index.js:2177 Warning: Failed prop type: Invalid prop `text` of type `array` supplied to `Marquee`, expected `string`.
in Marquee (at Session.js:86)
in Session (at Content.js:83)
in div (at Content.js:88)
in Content (at App.js:13)
in div (at App.js:11)
in App (at index.js:9)
__stack_frame_overlay_proxy_console__ @ index.js:2177
完整的Session.js代码
import React from 'react';
import Marquee from 'react-text-marquee';
import ReactDOMServer from 'react-dom/server';
class Session extends React.Component {
constructor(props) {
super(props);
this.state = {
"showConceptLogo" : true,
"logo" : "logo",
"filmTitle": "2D Justice League",
"classification": "PG",
"sessionAttributes": [
{
"key": "VMAX",
"text": "VMAX",
"color": "yellow",
"background": "red"
},
{
"key": "Gold",
"text": "Gold"
},
{
"key": "Vjnr",
"text": "Vjnr"
},
{
"key": "VPrem",
"text": "VPrem"
},
{
"key": "FWTC",
"text": "FWTC"
},
{
"key": "CC",
"text": "CC"
}
],
"screeningTime": "4:00PM"
}
}
RenderAttributesElement(attr) {
return (
<span style={{color: attr.color, backgroundColor: attr.background}}>{attr.text} </span>
);
}
ConceptLogo(props) {
if (props.display) {
return (
<div className="col-md-1">
<h2>{props.logo}</h2>
</div>
);
}
return null;
}
render() {
return (
<div className="row">
<this.ConceptLogo logo={this.state.logo} display={this.state.showConceptLogo} />
<div className="col-md-6">
<h2>{this.state.filmTitle}</h2>
</div>
<div className="col-md-1">
<h2>{this.state.classification}</h2>
</div>
<div className="col-md-3">
<Marquee hoverToStop={true} loop={true} leading={3000} trailing={3000} text={this.state.sessionAttributes.map(this.RenderAttributesElement)} />
</div>
<div className="col-md-1">
<h2>{this.state.screeningTime}</h2>
</div>
</div>
);
}
}
export default Session;
以下两个选项基本上只是隐藏警告。
选项 1: 在 运行 时间内更改 text
道具的类型:
import PropTypes from 'prop-types';
Marquee.propTypes.text = PropTypes.oneOfType([
PropTypes.string,
PropTypes.array,
]);
但是,如果库的作者决定进行更改,导致您对其组件的使用不正确,这可能会造成问题。
选项 2:fork 存储库,更改源中的 propTypes
字段,并在更新库的 package.json 中的版本后,设置一个link 在你的项目中 package.json:
"react-text-marquee": "git://github.com/yourusername/react-text-marquee"
在那之后你 运行 npm install
现在你必须维护你的库副本以防作者修复错误或类似的东西。您甚至可以更好地描述道具类型并向原始存储库发出拉取请求。
在反应中使用 react-text-marquee module 时,Chrome 开发工具控制台出现错误。
我不确定如何在不将输出更改为字符串而不是 JSX 的情况下解决此问题。
我应该澄清一下,该页面的功能实际上是正确的,但是最好能消除错误,以防它们导致后续问题。
这是 chrome 控制台错误:
09:43:29.747 index.js:2177 Warning: Failed prop type: Invalid prop `text` of type `array` supplied to `Marquee`, expected `string`.
in Marquee (at Session.js:86)
in Session (at Content.js:83)
in div (at Content.js:88)
in Content (at App.js:13)
in div (at App.js:11)
in App (at index.js:9)
__stack_frame_overlay_proxy_console__ @ index.js:2177
完整的Session.js代码
import React from 'react';
import Marquee from 'react-text-marquee';
import ReactDOMServer from 'react-dom/server';
class Session extends React.Component {
constructor(props) {
super(props);
this.state = {
"showConceptLogo" : true,
"logo" : "logo",
"filmTitle": "2D Justice League",
"classification": "PG",
"sessionAttributes": [
{
"key": "VMAX",
"text": "VMAX",
"color": "yellow",
"background": "red"
},
{
"key": "Gold",
"text": "Gold"
},
{
"key": "Vjnr",
"text": "Vjnr"
},
{
"key": "VPrem",
"text": "VPrem"
},
{
"key": "FWTC",
"text": "FWTC"
},
{
"key": "CC",
"text": "CC"
}
],
"screeningTime": "4:00PM"
}
}
RenderAttributesElement(attr) {
return (
<span style={{color: attr.color, backgroundColor: attr.background}}>{attr.text} </span>
);
}
ConceptLogo(props) {
if (props.display) {
return (
<div className="col-md-1">
<h2>{props.logo}</h2>
</div>
);
}
return null;
}
render() {
return (
<div className="row">
<this.ConceptLogo logo={this.state.logo} display={this.state.showConceptLogo} />
<div className="col-md-6">
<h2>{this.state.filmTitle}</h2>
</div>
<div className="col-md-1">
<h2>{this.state.classification}</h2>
</div>
<div className="col-md-3">
<Marquee hoverToStop={true} loop={true} leading={3000} trailing={3000} text={this.state.sessionAttributes.map(this.RenderAttributesElement)} />
</div>
<div className="col-md-1">
<h2>{this.state.screeningTime}</h2>
</div>
</div>
);
}
}
export default Session;
以下两个选项基本上只是隐藏警告。
选项 1: 在 运行 时间内更改 text
道具的类型:
import PropTypes from 'prop-types';
Marquee.propTypes.text = PropTypes.oneOfType([
PropTypes.string,
PropTypes.array,
]);
但是,如果库的作者决定进行更改,导致您对其组件的使用不正确,这可能会造成问题。
选项 2:fork 存储库,更改源中的 propTypes
字段,并在更新库的 package.json 中的版本后,设置一个link 在你的项目中 package.json:
"react-text-marquee": "git://github.com/yourusername/react-text-marquee"
在那之后你 运行 npm install
现在你必须维护你的库副本以防作者修复错误或类似的东西。您甚至可以更好地描述道具类型并向原始存储库发出拉取请求。