react基础创建项目

183 阅读3分钟

1. create-react-app 概念 

      Create React App是FaceBook的React团队官方出的一个构建React单页面应用的脚手架工具。 它本身集成了Webpack,并配置了一系列内置的loader和默认的npm的脚本,可以很轻松的实现零配置就可以快速开发React的应用。 

2. create-react-app 基本使用 

create-react-app 全局配置 

运行 npm install -g create-react-app 安装全局依赖包 
运行 npx create-react-app my-app 创建一个react项目
运行 cd my-app 进入项目根目录
运行 npm start 运行项目 

3. react定义组件

3.1 定义react无状态组件

直接以箭头函数定义组件 

const App = () => {
  return (
    <div>
      无状态组件
    </div>
  )
}

以函数名称作为html元素渲染组件 

ReactDOM.render(
  <App />,
  document.querySelector('#root')
)

 3.2 定义react有状态组件

以class的方式定义组件 
class App extends React.Component {
  render() {
    return (
      <div>
        有状态组件
      </div>
    )
  }
}

以函数名称作为html元素渲染组件 

ReactDOM.render(
  <App />,
  document.querySelector('#root')
)

4. react 组件传值 

4.1 react 无状态组件传值 

在渲染的组件上使用 属性名='属性值' 的方式传递 

 给箭头函数添加 props 形参 ,并在jsx语法中使用 {props.属性名} 的方式 调用 

4.2 react 有状态组件传值 

在渲染的组件上使用 属性名='属性值' 的方式传递

 直接在jsx语法中,使用 {this.props.属性名} 的方式 调用 

4.3 通过属性 defaultProps 给无状态组件传递默认值 

给组件添加固有属性 defaultProps 
export default function TodoHeader(props) {
}
TodoHeader.defaultProps = {
  x: 2,
  y: 3
}

 直接在jsx语法中,使用 {props.属性名} 的方式 调用

注意 :  defaultProps 是固定属性,不能修改

4.4 通过属性 defaultProps 给有状态组件传递默认值 

在有状态组件中定义静态属性 defaultProps  

export default class TodoInput extends Component {
  // 静态属性
  static defaultProps= {
    title: 'add'
  }
}

直接在jsx语法中,使用 {this.props.属性名} 的方式 调用

注意 : defaultProps 是固定属性,不能修改

5. react 类型检查 

5.1 无状态组件中配置 prop-types 第三方包进行类型检查 

运行 npm i prop-types -D 安装第三方依赖包 

配置要检查的数据  

export default function TodoHeader(props) {
}

TodoHeader.propTypes = {
  title: PropTypes.string,
}

注意 : TodoHeader为组件名称,propTypes 是固定属性,不能修改

5.2 有状态组件中配置 prop-types 第三方包进行类型检查 

运行 npm i prop-types -D 安装第三方依赖包 

配置要检查的数据  

import PropTypes from 'prop-types'  // 引入第三方包

export default class TodoInput extends Component {
  // 静态属性
  static propTypes = {
    title: propTypes.string.isRequired
  }
}

注意 : 有状态组件中可以直接定义静态属性 propTypes 检查要检验的属性

6. react 受控组件和非受控组件

6.1 react 受控组件的特性: 

在input的value值,必须是我们设置在constructor构造函数的state中的值 

通过onChange触发事件来改变state中保存的value值  

constructor() {
    super()
    this.state = {
      value: 'hello react'
    }
  }
  render() {
    return (
      <>
        <input type="text" value={this.state.value} onChange={this.handleChange} />
      </>
    )
  }

注意:React16.3之后的ref,建议需要引入createRef函数来定义  

7. react 样式使用 

7.1 使用css设置样式 

直接引入外部css样式 

在html标签元素上使用 className='css类名'  

注意 : 标签的类名必须是 className

7.2 使用classnames第三方包设置样式 

运行 npm i classnames -S 安装项目依赖包,并在index.js头部引入

import classNames from 'classnames'

在html标签元素上使用 className={classNames('class类名')} 

注意 : classNames函数中也可以以对象的方式设置如:classNames({color: false})

7.3 使用style设置样式 

直接在标签元素上使用 style={obj} 

注意 :  style的值是一个对象使用 {} 绑定

7.4 使用styled-components第三方包设置样式 

运行 npm i styled-components -S 安装项目依赖包,并在index.js头部引入

import styled from 'styled-components'
const Myh1 = styled.h1 `
  font-size: 50px
`

直接以返回的变量作为html元素渲染 

  <Myh1>app</Myh1>

8. react todolist案例 

8.1 cra工程项目 文件说明 

8.2 todolist案例基本组件定义 

  1. 在component文件夹下名定义TodoHeader 组件
  2. 在component文件夹下名定义TodoInput 组件
  3. 在component文件夹下名定义TodoList 组件 
  4. 在TodoList文件夹下定义子组件TodoItem组件