我先说这只是我接触 React 的第二天,我也不是编码专家。我将不胜感激对此作出解释的任何答案。然而,任何和所有的回应都非常有价值。
我试图理解 state 和 render() 之间的关系。我定义了一个名为myDataObj. App 组件在构造函数中获取一些变量。我创建了一个名为的变量someData,它接受一个数据对象并且myVar是一个整数。渲染函数第一次执行。我的每个 console.logs 都记录到控制台。然后在渲染之后执行 componentDidMount 函数,然后由于 setState 方法再次运行渲染。
我的问题是为什么我不能得到我注释掉的两行以从状态中提取值?我能够通过直接引用他们直接访问这些变量(范围内)myDataObj.myData[0]。我可以myVar通过状态访问变量,如 中所示this.state.myVar。
当试图通过someData.myData.push({name:'Item 4'});我将一个新项目推送到 myDataObj 时,我得到一个未定义的“someData”。
当试图通过{console.log(this.state.someData.myData[0])}我得到一个'无法读取未定义的属性'0'来记录变量的第一个元素时。
希望我能够正确地阐明问题。代码如下。
谢谢
import React, {Component} from 'react';
import './App.css';
let myDataObj = {
myData: [
{name:'Item 1'},
{name:'Item 2'},
{name:'Item 3'}
]
};
let myVar = 2
class App extends Component {
constructor() {
super();
this.state = {someData: {}, myVar}
}
componentDidMount() {
myVar = myVar + 1;
myDataObj.myData.push({name:'Item 4'});
// someData.myData.push({name:'Item 4'}); this doesn't work... 'someData' is not defined
this.setState({someData: myDataObj, myVar});
}
render () {
return(
<div className="App">
{console.log(myVar)} {/* Logs a 2 then 3 */}
{console.log(this.state.myVar)} {/* Logs a 2 then 3 */}
{console.log(myDataObj.myData[3])} {/*Logs undefined then 'Item 4' */}
{/* {console.log(this.state.someData.myData[0])} */} {/*TypeError: Cannot read property '0' of undefined */}
</div>
);
}
}
export default App;
浮云间
红糖糍粑
翻翻过去那场雪
相关分类