老师有些疑问
来源:2-3 Ajax获取Header组件数据
咸鱼王派大星
2021-07-27 07:01:03
import React , { Component,Fragment} from 'react';
import logo from './logo.png';
import './header.css';
import { Menu, Icon } from 'antd';
import axios from 'axios';
class AppHeader extends Component {
constructor(props){
super(props);
this.state = {
list:[]
};
this.a = '123';
}
getMenuItems(){
return this.state.list.map(item =>{
return(
<Menu.Item key={item.id}>
<Icon type={item.icon} />{item.title}
</Menu.Item>
)
})
}
componentDidMount(){
axios.get('http://www.dell-lee.com/react/api/header.json').then(
(res)=>{
// this.setState({
// list:res.data.data
// });
this.state.list.push(res.data.data);
console.log(this.a,this.state.list);
}
)
}
render(){
return(
<Fragment>
<img src={logo} className='app-header-logo'/>
<Menu mode="horizontal" className='app-header-menu'>
{this.getMenuItems()}
</Menu>
</Fragment>
)
}
}
export default AppHeader;
// this.setState({
// list:res.data.data
// });
this.state.list.push(res.data.data);
console.log(this.a,this.state.list);
问题1:直接在class类的方法里面用this.a来用构造方法里面的属性值是不是只能访问,而要改变构造方法里的属性值要用到this.setStata这种规定语法
问题2:能讲一下this.setState吗
1回答
好帮手慕慕子
2021-07-27
同学你好,对于你的问题解答如下:
1、不是的,即可访问也可以修改,以源码为示例:
页面中显示a的值为0,而控制台输出的是修改后的a的值9,如下:
由控制台输出的结果可知,可以改变a的值。但是,因为直接修改a的值(没有使用this.setState),无法反应到视图上,也就是无法反映到页面中,所以页面中依然显示的是初始值0。
2、 this.setState方法是React框架提供的一方法,用来this.state中定义的数据,并将修改后的值反映到视图上,也就说,使用this.setState方法改变数据后,页面中的数据也会跟着改变。
祝学习愉快~
相似问题