首页 > 其他分享 >react

react

时间:2023-04-23 16:14:01浏览次数:39  
标签:function React return name react 组件 JSX

React 是一个用于构建用户界面的 JAVASCRIPT 库。

React 主要用于构建 UI,很多人认为 React 是 MVC 中的 V(视图)。

React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。

React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

1. 初识React

React 应用程序是由 组件 组成的。一个组件是 UI(用户界面)的一部分,它拥有自己的逻辑和外观。组件可以小到一个按钮,也可以大到整个页面。

React 组件是返回标签的 JavaScript 函数:

function MyButton() {
  return (
    <button>I'm a button</button>
  );
}

2. jsx

JSX(JavaScript XML)是js内定义的一套XML语法,可以解析出目标js代码,颠覆传统js写法。实质上HTML也是xml协议,有由浏览器解析,而JSX是由js解析。当然也可以通过构建工具先解析生成,如webpack(使用babel-loader),这样可以减少代码这行中js解析JSX的时间。

  • 更加熟悉,语法跟HTML非常相似(90以上相似度)
  • 更加语义化,允许自定义标签及组件。
  • 更加直观,标签处理方式,更加可读。
  • 抽象化,React的升级,不需要改动任何JSX代码。
  • 关注点分离,模块化,JSX以干净且简洁的方式保证了组件中的标签与所有业务逻辑的互相分离。

2.1 使用注意事项

  1. JSX必须严格闭合

    //错误
    <div>
        
    //正确
    <div/>(也行,看需求)
    <div></div> 
    
  2. JSX标签可以当做一个变量,可以在任何位置使用和使用变量装起来

    var div = <div>ddd</div>
    ReactDOM.render(div);
    
  3. JSX一个标签是一个组件,当存在两个组件在同一级,必须使用一个标签(组件)包起来

    错误写法

    <div></div>
    <div></div>
    

    正确写法

    <span>
        <div></div>
        <div></div>
    </span>
    
  4. 自定义组件使用首字母大写

    首字母不大写直接解析为同名html标签

    const test = <div></div>
    <Test /> //自定义
    <div></div> //直接解析为<div></div>
    <test /> //直接解析为<test></test>,在浏览器是不识别的,无法显示
    
  5. 使用驼峰式命名法给 所有 大部分属性命名

<img 
  src="https://i.imgur.com/yXOvdOSs.jpg" 
  alt="Hedy Lamarr" 
  className="photo"
/>

2.2 JSX使用JavaScipt

2.2.1 变量

var name = "test";
<div>{name + "666"}</div>

2.2.2 大括号{}的使用

JSX 会让你把标签放到 JavaScript 中。而大括号会让你 “回到” JavaScript 中,这样你就可以从你的代码中嵌入一些变量并展示给用户。例如,这将显示 user.name

return (
  <h1>
    {user.name}
  </h1>
);

你还可以将 JSX 属性 “转义到 JavaScript”,但你必须使用大括号 而非 引号

return (
  <img
    className="avatar"
    src={user.imageUrl}
  />
);

你也可以把更为复杂的表达式放入 JSX 的大括号内(字符串拼接,循环。。。):

const user = {
  name: 'Hedy Lamarr',
  imageUrl: 'https://i.imgur.com/yXOvdOSs.jpg',
  imageSize: 90,
};

export default function Profile() {
  return (
    <>
      <h1>{user.name}</h1>
      <img
        className="avatar"
        src={user.imageUrl}
        alt={'Photo of ' + user.name}
        style={{
          width: user.imageSize,
          height: user.imageSize
        }}
      />
    </>
  );
}

2.2.3 函数

var names = ['Alice', 'Emily', 'Kate'];
<div>
    { 
        names.map(function (name) { 
            return <div>Hello, {name}!</div>
        }) 
    }
</div>

2.2.4 条件渲染

  • 使用 if

    <div className={if(isComplete){ 'is-complete' }}></div>
    
  • 使用三目运算符

    <div className={this.state.isComplete ? 'is-complete' : ''}></div>
    
  • 使用&&运算符

    <div className={state.isComplete && 'is-complete'}></div>
    

2.2.5 渲染列表

这里给出一个由数组生成一系列列表项的简单示例:

  1. 首先,把数据 存储 到数组中:
const products = [
  { title: 'Cabbage', isFruit: false, id: 1 },
  { title: 'Garlic', isFruit: false, id: 2 },
  { title: 'Apple', isFruit: true, id: 3 },
];
  1. 遍历 products 这个数组中的每一项,并获得一个新的 JSX 节点数组 listItems
const listItems = products.map(product =>
    <li
      key={product.id}
      style={{
        color: product.isFruit ? 'magenta' : 'darkgreen'
      }}
    >
      {product.title}
    </li>
  1. listItems<ul> 包裹起来,然后 返回 它:
return <ul>{listItems}</ul>;

<li> 有一个 key 属性。对于列表中的每一个元素,你应该传递一个字符串或者数字给 key,用于在其兄弟节点中唯一标识该元素。这样做可以提高性能。

const products = [
  { title: 'Cabbage', isFruit: false, id: 1 },
  { title: 'Garlic', isFruit: false, id: 2 },
  { title: 'Apple', isFruit: true, id: 3 },
];

export default function ShoppingList() {
  const listItems = products.map(product =>
    <li
      key={product.id}
      style={{
        color: product.isFruit ? 'magenta' : 'darkgreen'
      }}
    >
      {product.title}
    </li>

image-20230423154036420

2.3 样式

2.3.1 class样式

在 React 中,你可以使用 className 来指定一个 CSS 的 class。它与 HTML 的 class 属性的工作方式相同:

<img className="avatar" />

然后,你可以在一个单独的 CSS 文件中为它编写 CSS 规则:

/* In your CSS */
.avatar {
  border-radius: 50%;
}

2.3.2 style样式

<img
  className="avatar"
  style={{
    width: user.imageSize,
    height: user.imageSize
  }}
/>

2.4 组件

2.4.1 介绍

react的组件通常是一个函数或者是一个类返回的是一段特殊html代码

function MyButton() {
  return (
    <button>I'm a button</button>
  );
}

2.4.2 使用

export default function MyApp() {
  return (
    <div>
      <h1>Welcome to my app</h1>
      <MyButton />
    </div>
  );
}

2.4.3 props

Props 是你传递给 JSX 标签的信息。例如,classNamesrcaltwidthheight 便是一些可以传递给 <img> 的 props

function Avatar() {
  return (
    <img
      className="avatar"
      src="https://i.imgur.com/1bX5QH6.jpg"
      alt="Lin Lanying"
      width={100}
      height={100}
    />
  );
}

export default function Profile() {
  return (
    <Avatar />
  );
}

2.4.4 组件传值

  1. 父传子

    Profile 的子组件是 Avatar

    // 给Avatar组件的person传值(传了一个对象){ name: 'Lin Lanying', imageId: '1bX5QH6' }
    // 给size(传了一个数字) 100
    export default function Profile() {
      return (
        <Avatar
          person={{ name: 'Lin Lanying', imageId: '1bX5QH6' }}
          size={100}
        />
      );
    }
    

    子组件 读取 props

    function Avatar(props) {
      const { person, size } = props
      return (
        <img
          className="avatar"
          src={getImageUrl(person)}
          alt={person.name}
          width={size}
          height={size}
        />
      );
    }
    
import { getImageUrl } from './utils.js';

function Avatar({ person, size }) {
  return (
    <img
      className="avatar"
      src={getImageUrl(person)}
      alt={person.name}
      width={size}
      height={size}
    />
  );
}

export default function Profile() {
  return (
    <div>
      <Avatar
        size={100}
        person={{ 
          name: 'Katsuko Saruhashi', 
          imageId: 'YfeOqp2'
        }}
      />
      <Avatar
        size={50}
        person={{ 
          name: 'Lin Lanying',
          imageId: '1bX5QH6'
        }}
      />
    </div>
  );
}

标签:function,React,return,name,react,组件,JSX
From: https://www.cnblogs.com/yangyucai/p/17346815.html

相关文章

  • react18中antd的Upload组件上传头像,并且拿到服务器返回的头像的url地址在页面中显示头
    业务需求:上传头像,上传完毕后拿到头像的url,把头像展示在页面中,最终把头像url和其他用户信息一起发送给服务器 上传头像流程 导入Upload组件和图标(一个加号,一个加载中)import{Upload}from'antd';import{PlusOutlined,LoadingOutlined}from'@ant-design/ic......
  • vscode中react组件
    title:"vscode中ES7+React/Redux/React-Nativesnippets插件使用"date:2023-04-0723:21:32tags:['Vscode','插件']categories:["工具篇"]通过使用这个插件我们可以很方便的进行组件/方法/文件的导入本篇博客仅对插件进行介绍翻译,便于自己以后使用常用片段列表imr:......
  • React+hook+ts+ant design封装一个具有编辑和新增功能的页面
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷微信公众号前端小歌谣需求分析在前端项目中最常......
  • 部署Spring Boot + React前后端分离中的奇特发现
    今天在尝试在服务器上部署SpringBoot+React前后端分离应用时有一个奇特的发现。服务器首先是前端npmrunbuild之后,将构建好的应用移动到/var/www/html文件夹,nginx启动可以正常访问,axios接口访问地址为localhost:8080;后端maven构建并运行。本地电脑同样开始运行前后端。......
  • ReactNative 打包发布 Android 应用
    一、创建应用签名1、在AndroidStudio菜单栏中,依次点击Build >GenerateSignedBundle/APK 2、在Generate SignedBundleorAPK对话框中,选择APK,点击Next按钮 3、在Keystorepath字段下,点击Createnew按钮 4、在NewKeyStore窗口中,点击右侧文件......
  • react 生命周期钩子函数
    1、挂载:construct、getDerivedStateFromProps、render、componentDidMounted2、更新:getDerivedStateFromProps、componentWillUpdate、render、getSnapshotBeforeUpdate、componentDidUpdated3、卸载:componentWillUnmounted4、请求放在componentDidMount里react生命周期图:h......
  • react ref
    一、使用ref操作DOM1、要访问由React管理的DOM节点,首先,引入useRefHook:import{useRef}from'react';2、然后,在你的组件中使用它声明一个ref:constmyRef=useRef(null);3、最后,将其作为ref属性传给DOM节点:<divref={myRef}>总结:useRefHook......
  • vue中的ref 和 reactive--今天学了啥 23/3/12
     这两者都是默认deepreactive,不同的是reactive使用es6的proxy,只能使对象reactive。ref不仅支持对象还支持基本数组,不能说ref是reactive的超集,因为这两者返回的类型就不一样。 Reftype:functionref<T>(value:T):Ref<UnwrapRef<T>>interfaceRef<T>{value:T}如......
  • 快收藏ReactOS 新手指南
    导读ReactOS是一个比较年轻的开源操作系统,它提供了一个和WindowsNT类似的图形界面,并且它的目标也是提供一个与NT功能和应用程序兼容性差不多的系统。这个项目在没有使用任何Unix架构的情况下实现了一个类似Wine的用户模式。它的开发者们从头实现了NT的架构以及对......
  • React+hook+ts+ant design封装一个具有编辑和新增功能的页面
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷微信公众号前端小歌谣需求分析在前端项目中最常......