React技巧之导入组件
正文从这开始~
总览
在React中,从其他文件中导入组件:
- 从
A文件中导出组件。比如说,export function Button() {}。 - 在
B文件中导入组件。比如说,import {Button} from './another-file'。 - 在
B文件中使用导入的组件。
命名导入导出
下面的例子是从一个名为another-file.js的文件中导入组件。
// ️ named export
export function BigButton() {
return (
<button
style={{padding: '2rem 1rem'}}
onClick={() => console.log('big button')}
>
Big button
</button>
);
}
// ️ named export
export const SmallButton = () => {
return (
<button onClick={() => console.log('small button')}>Small button</button>
);
};
下面是我们如何从一个名为App.js文件中导入组件。
// ️ named import
import {BigButton, SmallButton} from './another-file';
export default function App() {
return (
<div>
<BigButton />
<hr />
<SmallButton />
</div>
);
}
如有必要,请确保当前路径指向another-file.js模块。上面的例子假设another-file.js和App.js位于相同的目录下。
举例来说,如果another-file.js位于上层目录,你必须这样导入:import {BigButton} from '../another-file' 。
在导入组件时,我们使用大括号包裹组件名称。这被称为命名导入。
import/export语法被称为JavaScript模块。为了能够从不同的文件中导入一个组件,必须使用命名的或默认的导出方式将其导出。上述例子使用了命名导出和导入。
命名和默认导入导出的主要不同之处在于,在每个文件中,你可以有多个命名导出,但只能有一个默认导出。
默认导入导出
让我们看一个例子,看看我们如何导入一个使用默认导出的组件。
// ️ default export
export default function BigButton() {
return (
<button
style={{padding: '2rem 1rem'}}
onClick={() => console.log('big button')}
>
Big button
</button>
);
}
很重要:如果你导出一个变量(或者箭头函数)作为默认导出,你必须先声明再导出。你不能在同一行内声明变量同时默认导出变量。
const BigButton = () => {
return (
<button
style={{padding: '2rem 1rem'}}
onClick={() => console.log('big button')}
>
Big button
</button>
);
}
// ️ default export
export default BigButton;
下面是如何使用默认导入来导入组件。
// ️ default import
import BigButton from './another-file';
export default function App() {
return (
<div>
<BigButton />
</div>
);
}
当导入组件时,我们也可以使用不同的名字,比如Foo。
// ️ default import
import Foo from './another-file';
export default function App() {
return (
<div>
<Foo />
</div>
);
}
这样也会生效,但会令人疑惑,因此应该避免。
根据我的经验,大多数现实世界的代码库只使用命名的导出和导入,因为它们更容易利用你的IDE进行自动完成和自动导入。 你也不必考虑哪些成员是用默认导出或命名导出的。
混合导入导出
你也可以混合匹配,下面示例的文件使用了默认导出和命名导出。
// ️ default export
export default function BigButton() {
return (
<button
style={{padding: '2rem 1rem'}}
onClick={() => console.log('big button')}
>
Big button
</button>
);
}
// ️ named export
export const SmallButton = () => {
return (
<button onClick={() => console.log('small button')}>Small button</button>
);
};
下面是如何导入这两个组件。
// ️ default and named imports
import BigButton, {SmallButton} from './another-file';
export default function App() {
return (
<div>
<BigButton />
<hr />
<SmallButton />
</div>
);
}
我们使用默认导入来导入BigButton组件,使用命名导入来导入SmallButton组件。
请注意,每个文件只能有一个默认导出,但你可以根据需要有多个命名导出。
React技巧之导入组件的更多相关文章
- React组件导入的两种方式(动态导入组件的实现)
一. react组件两种导入方式 React组件可以通过两种方式导入另一个组件 import(常用) import component from './component' require const ...
- React 之 高阶组件的理解
1.基本概念 高阶组件是参数为组件,返回值为新组件的函数. 2.举例说明 ① 装饰工厂模式 组件是 react 中的基本单元,组件中通常有一些逻辑(非渲染)需要复用处理.这里我们可以用高阶组件对组件内 ...
- 如何实现 React 模块动态导入
如何实现 React 模块动态导入 React 模块动态导入 代码分割 webpack & code splitting https://reactjs.org/docs/code-split ...
- react native之组织组件
这些组件包括<TabView>,<NavigatorView>和<ListView>,他们实现了手机端最常用的交互和导航.你会发现这些组件在实际的项目中会非常有用. ...
- React和Vue的组件更新比较
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px "Helvetica Neue"; color: #404040 } p. ...
- reactjs-swiper react轮播图组件基于swiper
react轮播图组件基于swiper demo地址:http://reactjs-ui.github.io/reactjs-swiper/simple.html 1. 下载安装 npm install ...
- React Native之倒计时组件的实现(ios android)
React Native之倒计时组件的实现(ios android) 一,需求分析 1,app需实现类似于淘宝的活动倒计时,并在倒计时结束时,活动也结束. 2,实现订单倒计时,并在倒计时结束时,订单关 ...
- React Native 学习-组件说明和生命周期
组件的详细说明(Component Specifications) 当通过调用 React.createClass() 来创建组件的时候,你应该提供一个包含 render 方法的对象,并且也可以包含其 ...
- React:快速上手(2)——组件通信
React:快速上手(2)——组件通信 向父组件传递数据 父组件可以通过设置子组件的props属性进行向子组件传值,同时也可以传递一个回调函数,来获取到子组件内部的数据. 效果演示 子组件是输入框,父 ...
随机推荐
- Jenkins+Allure测试报告+飞书机器人发送通知
一.前言 之前讲了jenkins如何设置定时任务执行脚本,结合实际情况,本篇讲述在jenkins构建成功后,如何生成测试报告,以及推送飞书(因为我公司用的是飞书,所以是发送到飞书机器人). 本次实践搞 ...
- Not Adding - 题解【数学,枚举】
题面 原题链接(CF1627D) You have an array \(a_1,a_2,-,a_n\) consisting of \(n\) distinct integers. You are ...
- 面试突击42:synchronized和ReentrantLock有什么区别?
在 Java 中,常用的锁有两种:synchronized(内置锁)和 ReentrantLock(可重入锁),二者的功效都是相同得,但又有很多不同点,所以我们今天就来聊聊. 区别1:用法不同 syn ...
- 个人&博客信息
博客配置 服务器:无 配置链接:在博客园中安装皮肤 皮肤:GEEK by GUANGZAN 个人简介 本蒟蒻是广东中山人 如果您有一些问题,请发送邮件至mo ...
- Linux系统句柄优化
Linux系统句柄介绍 文件句柄,会随着进程数增加而增加.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024.在生产环境中很容易到达这个值,因此这里就会成为系统的瓶颈. 在Linux ...
- springboot处理blog字段
springboot处理blog字段 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章https://www.javaman.cn/ 1.数据库表结构 其中content为long ...
- k8s中应用GlusterFS类型StorageClass
GlusterFS在Kubernetes中的应用 GlusterFS服务简介 GlusterFS是一个可扩展,分布式文件系统,集成来自多台服务器上的磁盘存储资源到单一全局命名空间,以提供共享文件存储. ...
- 出现bash: ifconfig:command not found的解决办法,即安装ifconfig命令(亲测有效)
初装centos 7时,运行config报 command not found 错误, ifconfig命令是设置或显示网络接口的程序,可以显示出我们机器的网卡信息,可是有些时候最小化安装CentOS ...
- 每天一个 HTTP 状态码 205
205 Reset Content 205 Reset Content 表示服务器成功地处理了客户端的请求,要求客户端重置它发送请求时的文档视图.这个响应码跟 204 No Content 类似,也不 ...
- 基于“均态分布”随机数算法的一次性口令OneTimePassword(原创)
/* 所谓均态分布随机数算法是指:每个数(整数或实数)无序地分布在数轴上,值只出现一次永不重复.体现了香农的一次一密理论. * 均体现在每个数的值是平均概率,即都有出现:态体现在每个数在数轴上的位置是 ...