【发布时间】:2021-07-07 08:58:18
【问题描述】:
我正在上课,我必须建立一个网站(我是前端的新手!),但我的教授和 TA 无法帮助我解决这个问题(React 组件,JavaScript)。
- 当我传入 变量作为道具
<Stock ticker={stock.ticker}/>时,该变量在控制台上显示为 prop,但是当我尝试访问它时,它变得未定义。 - Passing in variable as a prop: First output is
console.log(this);, Second output isconsole.log(this.props);right after - 当我通过时
在 String as a prop
<Stock ticker="AMC"/>中,字符串是 在控制台上显示为道具,我可以访问它。 - Passing in a String as a prop: First output is
console.log(this);, Second output isconsole.log(this.props);right after
一个观察结果是,在 render() 函数中,props 总是被定义。起初我以为它可能没有被安装或一些条件渲染问题,但 String 道具工作的事实可能会抵消这一点?我也尝试过使用<Stock ticker={String(stock.ticker)}/>,以防万一没有传递字符串,但控制台已经显示该变量是字符串道具。
另一个奇怪的现象是,当我更新我的代码并在 npm start 期间保存它时,变量 as prop 突然被定义了。在此之后页面的刷新使其再次未定义。硬编码变量/下载的 json 文件也可以正常工作。
部分组件:
class Stock extends React.Component {
constructor(props) {
super(props);
this.state = {
// some stuff here
}
}
componentDidMount() {
this.getStock();
}
getStock() {
const key = secretstuff;
let stock = this.props.ticker;
console.log(this); // props says defined on console here
console.log(this.props); // props is undefined on console here
let call = `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=${stock}&outputsize=compact&apikey=${key}`;
父页面:
class Page extends React.Component {
constructor(props) {
super(props);
this.state = {
stock: {}
}
}
componentDidMount() {
this.getStock();
}
getStock() {
const symbol = this.props.match.params.id; // this part works
// some fetch code, works completely fine to show on page
}
render() {
let stock = this.state.stock;
return (
<div>
<h1>{stock.ticker}</h1> // WORKS
<h2>{stock.name}</h2> // WORKS
</div>
<div>
<Stock ticker={stock.ticker}/> // DOESN'T WORK!
...... etc ............
【问题讨论】:
-
那么你的代码在哪里?
-
更新了部分组件mb
标签: javascript reactjs frontend react-props