【青训营】- React实战(上)

173 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

本文同时参与掘力星计划,赢取创作大礼包,挑战创作激励金

代码仓库

github.com/xuchaobei/r…

课程大纲

QQ截图20211023211334.png

React视图层

项目创建

Create React App

npx create-react-app my-app  #创建项目
npm start  #启动项目

这样React项目创建好啦! QQ截图20211023210655.png QQ截图20211023212135.png

JSX

JSX 是React引入的基于JS的扩展语法,用JSX语法描述UI的结构。 QQ截图20211023212355.png JSX中的标签有两种类型,一种是HTML标签,一种是React组件标签。

如何将 React 元素渲染到DOM中?

const element = <h1>hello,world</h1>;
ReactDOM.render(element,document.getElementById('root'));

组件

React组件是在React元素之上的封装,是React应用组成和复用的基本单元。

component = (props) => element

React 组件必须像纯函数一样运行! QQ截图20211023213042.png 函数组件

function Welcome(props) {
    return <h1>Hello, {props.name}</h1>;
}

类组件

class Welcome extends React.Component {
    render() {
        return <h1>Hello,{this.props.name}</h1>;
    }
}

列表中的key

  • 只需要保证,在同一个数组中的兄弟元素之间的 key 是唯一的。而不需要在整个应用程序甚至单个组件中保持唯一。

  • 理想情况下,key 应该从数据中获取,对应着唯一且固定的标识符,例如 post.id。

State

State的出现是为了在组件内部动态的渲染UI结构。State可以使React组件具有动态性 QQ截图20211023214155.png QQ截图20211023213906.png SetState注意事项

  • 更改state要通过setState方法实现
// Wrong
this.state.comment = 'hello';  //不能通过 this.state 直接赋值
// Correct  
this.setState({comment:'Hello'});  //使用 this.setState 方法赋值
  • 传入参数问题
// Wrong
this.state.setState({
    counter: this.state.counter + this.props.increment
});
// Correct
this.state.setState((state,props)=> ({
    counter: state.counter + props.increment
}));
  • Psops: 父组件传递给子组件的属性,在子组件内部只读。

  • State: 组件内部自己维护的状态,可以被修改。

Form

受控组件 QQ截图20211023215107.png 非受控组件 QQ截图20211023215227.png

组件的组合用法

QQ截图20211023215348.png 更加灵活的组合方式 QQ截图20211023215507.png

Hooks

React 16.8 以后,出现了新的组件开发方式 QQ截图20211023215659.png QQ截图20211023215804.png QQ截图20211023220117.png QQ截图20211023220202.png 使用hooks要遵守的规则

规则1

  • 只能在函数组件、自定义hook中调用hook

规则2

  • 只能在函数的最顶层控制流中调用hook QQ截图20211023220407.png 为什么要出现hooks?

  • 使用Hook可以让我们对组件状态管理逻辑进行复用

  • 面向React的未来

React Router 路由层

路由分类

服务端路由

请求发送到服务端,服务端决定返回对应的页面内容。

示例:www.bytedance.com/

客户端路由

请求不发送到服务端,由客户端代码更新页面内容。

示例:juejin.cn/

路由分类

两种路由的应用场景,左边是多页面应用,右边是单页面应用。 QQ截图20211023221011.png

React Router是什么

React 应用中的客户端路由解决方案

基础示例

示例

export default function BasicExample() {
  return (
    <Router>
      <div>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/about">About</Link>
          </li>
          <li>
            <Link to="/dashboard">Dashboard</Link>
          </li>
        </ul>

        <hr />

        <Switch>
          <Route exact path="/">
            <Home />
          </Route>
          <Route path="/about">
            <About />
          </Route>
          <Route path="/dashboard">
            <Dashboard />
          </Route>
          <Route path="/user/:username">
            <User />
          </Route>
        </Switch>
      </div>
    </Router>
  );
}

Route

  • BrowserRouter:根据URL中的path做路由跳转

  • HashRouter:根据URL中的hash部分做路由跳转 示例

  • 当URL和Route中定义的path匹配时,渲染对应的组件

  • 重要props: path、exact 示例

Switch

  • 当找到Switch组件内的第一个路由规则匹配的Route组件后,立即停止后续的查找 示例

路由跳转

  • 声明式的组件方式:Link

  • 命令式的API调用方式:history.push

Hooks

  • UseHistory:获取history对象

  • useParams:获取路由中的参数 示例

集成React Router

在实战案例中,集成React Router

结语

如以上有错误的地方,请在评论区中指出,谢谢!

小可爱们看完点个赞再走一走~~