老师有些疑问

来源: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、不是的,即可访问也可以修改,以源码为示例:

http://img.mukewang.com/climg/60ff7cb9094e3d7d08350718.jpg

页面中显示a的值为0,而控制台输出的是修改后的a的值9,如下:

http://img.mukewang.com/climg/60ff7cef092bbb1014420454.jpg

由控制台输出的结果可知,可以改变a的值。但是,因为直接修改a的值(没有使用this.setState),无法反应到视图上,也就是无法反映到页面中,所以页面中依然显示的是初始值0。


2、 this.setState方法是React框架提供的一方法,用来this.state中定义的数据,并将修改后的值反映到视图上,也就说,使用this.setState方法改变数据后,页面中的数据也会跟着改变。

祝学习愉快~

0

0 学习 · 15276 问题

查看课程