總覽
在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
元件。
請注意,每個檔案只能有一個預設匯出,但你可以根據需要有多個命名匯出。