react第二天学习笔记

1.react中css样式的使用方式

  1)jsx内嵌样式(这第一个大括号表示要在jsx中写js,第二个表示js对象)

    <li style = {{color : '#FF0'}}>jsx内嵌样式</li>
  2)使用className在通过css文件控制样式
    <li className = 'Red'>使用className在通过css控制样式</li>
  3)当有多个className时,也就是有多重特征时,可以从npm中下载classnames,因为classNames为方法   
    <li className = {classNames("a",{b:true,c:false})}></li>
  4)使用styled-components在原有元素的样式上包装成新的样式(扩展元素名都需要大写,且第一种表示为模板字符串``,不是引号)
    const Title = styled.h1`
      color : #F00;
    `
    const Button = styled.button({
      color: 'grey',
    });
    <Title />
 
2.关于组件布局总结
  1)每个组件渲染时,只能拥有一个根标签,如果根标签不想用div占位时,可以使用Fragment即空组件
  2)  每个组件原则上应该都有一个文件夹
  3)  在路径问题上,react会默认寻找当前路径下的index.js,import时可以省略部分
  4)  在父js中,若仅为导出使用,可用以下格式
    export {default as List} from './list';
 
3.关于组件中的props的总结:
  1)props是组件传递值的对象,组件可以通过添加属性来传递值,组件的子元素为props中的children值可以为元素等值
  2)类组件可以直接调用,函数组件需要通过函数名.props去调用
  3)往props里传数值时,需加大括号表示,否则即为字符串
  4)在props对象里的值进行检验时,有props-types方法,即用组件自己提供的propsTypes进行数值类型和有无的检验
 
      Test.propsTypes = {
        key : props-types.String.isRequired   (注意不能单独用isRequired,会报错)
      }
  5)对props里的值设置默认值时,组件自己提供了defaultProps
    Test.defaultProps = {   //这是函数式组件的使用方法
      key : 默认值
    }
 
4.组件的分类:
  1)根据组件的创建方式不一样分为:
    类组件和函数组件
  2)根据组件有无state分为:
    有状态组件和无状态组件
  3)根据控制程度可分为
    完全受控组件:数据全部来自于props,数据源传递
    半受控组件:部分数据受控于数据源(props),部分数据受控于state
    不受控组件:数据受控于内部state的变化
 
5.模板渲染的语法和props向下传递的技巧
  1)在数据源中,数据都是在构造函数中对state进行初始化操作(注意,得先调用super方法)
  2)然后利用props向下传递,不能跨组件传递,
  3)如果传递的内容中有html字符串时,可以用以下方式解译
    <div dangerousSetInnerHTML = {{_html: '<div>html字符串</div>'}} />
  4)如果在传递的数据中有数组时,可以用js中的map解析
    this.props.list.map(item => {
      return (
        <div key="key值必须给,否则会报错" value = {item.value}/>
      )
    })
 
6.react对内部数据进行动态修改时使用setState修改数据的两种方式:(这个方法可以有两个参数, 第一个参数可以有两种情况)
  1)this.setState({对象里是state中要修改的内容})    第一个参数为对象
  2)this.setState((preState,preProps) => {    上一次的State和上一次的Props
    return  {}
  )}
  3)这个方法有第二个参数,因为这个方法是异步的,所以第二个参数是回调函数,参数是改变后的 state和props
    
  
    
 
posted @ 2020-02-12 10:30  whhhd  阅读(149)  评论(0编辑  收藏  举报