React Icons:带实例的综合教程

1,684 阅读5分钟

在这篇文章中,你将学习如何使用React Icons库来在你的React项目中显示图标。

简介

增强你的React项目的用户体验的最好方法之一是使用明亮和彩色的图标。它们不仅能让你的应用程序看起来更好,而且还能让你的网站有更现代、更时尚的感觉。

图标甚至可以让设计师节省屏幕空间。此外,图标是通用的,它们的用法对开发者和用户来说都是熟悉的。

例如,你认为什么看起来更好?这个文本。

All Text with No Icons

还是这些图标。

Text Including React Icons

要在React中渲染图标,最常用的库是React Icons。它是一个易于使用的库,用于在你的应用程序中渲染图标。

安装

在你的React项目中,运行以下终端命令。

npm install react-icons

简单用法

首先,将你想要的图标导入你的项目中。

import {FcHeadset} from "react-icons/fc" 

然后在你的React组件中渲染它。

return (
    <div>
        <p>
            For coding, you need some good <FcHeadset />
        </p>
    </div>
);

正如你所看到的,你可以将一个图标作为一个子元素显示。

Headphones Icon in Running Text

注意,每个图标包都有自己的子文件夹。例如,如果你想从Game Icons包中获取图标,那么你应该使用下面的导入方式。

import { IconName } from "react-icons/gi";

在列表中渲染图标

像以前一样,像这样导入你的图标。

import { FcIpad, FcElectronics, FcCalculator } from "react-icons/fc";

在这里,我们从平面颜色包中导入了我们的图标。

要渲染它,在你的组件的return 块中写下以下代码。

return (
    <div>
        <h1> My wishlist</h1>
        <ul>
            <li>
                An iPad <FcIpad />{" "}
            </li>
            <li>
                AMD's new CPU <FcElectronics />
            </li>
            <li>
                Calculator for my exam <FcCalculator />
            </li>
        </ul>
    </div>
);

Three Icons in List Format

可点击的按钮和链接

import { FaGoogle, FaRegSun } from "react-icons/fa";
export default function SimpleButton() {
    return (
        <div>
            <p>Login With Google:</p>
            <a href="/auth/google">
                <FaGoogle />
            </a>
            <br />
            <button onClick={() => alert("Settings page")}>
                <FaRegSun />
            </button>
        </div>
    );
}

在第1行,我们从Font Awesome包中导入两个图标。在第7行,我们在a 标签之间渲染FaGoogle 图标。这意味着,这个图标现在是一个链接。之后,在第11行,我们在button 标签之间渲染FaRegSun 图标,从而将该图标变成一个可点击的按钮。

Google Icon in Running Text

条件性渲染

import { FcAndroidOs } from "react-icons/fc";
export default function ConditionalRendering() {
    const usesAndroid = true;
    return (
        <div>
            {usesAndroid ? (
                <p>
                    {" "}
                    I use <FcAndroidOs />
                </p>
            ) : (
                <p> Does not use Android</p>
            )}
        </div>
    );
}

在第3行,我们声明usesAndroid 布尔值,这将使条件渲染成为可能。此外,第6-13行的代码指出,如果usesAndroid 的值是true ,那么就像这样渲染FcAndroidOs 的图标。

Android Icon in Running Text

否则,渲染一个标准的p 元素。

在两个图标之间进行交换

比方说,你想从Google+的图标换成苹果的图标。你可以使用React Hooks来解决这个问题。

import { useState } from "react";
import { AiFillApple, AiOutlineGoogle } from "react-icons/ai";
export default function SwappingIcons() {
    const [icon, setIcon] = useState("apple");

    const changeIcon = (state) => {
        if (state === "apple") {
            return "google";
        }
        return "apple";
    };

    return (
        <div>
            <button onClick={() => setIcon((old) => changeIcon(old))}>Change</button>
            <p>
                {" "}
                I work at:{icon === "apple" ? <AiFillApple /> : <AiOutlineGoogle />}
            </p>{" "}
        </div>
    );
}

首先,我们声明一个icon Hook,决定渲染哪个图标。初始值是apple

从第6行到第11行,我们再创建changeIcon 函数,它在applegoogle 之间交换icon 的值。

后来,我们创建了一个简单的button 元素。如果用户点击这个按钮,然后运行changeIcon 函数来互换值。

最后,在第18行,我们指定,如果icon Hook是apple ,那么呈现AiFillApple 图标。否则,渲染AiOutlineGoogle 图标。

Apple and Google Changing Icons

使用表单

这里,你将使用Formik库,因为它更容易操作。要安装Formik,运行以下命令。

npm i formik

现在要建立一个带有图标的表单,请写下以下代码。

import React, { useState } from "react";
import { Formik, Field, Form } from "formik";
import { AiFillApple, AiOutlineGoogle } from "react-icons/ai";

export default function FormExample() {
    const [icon, setIcon] = useState("");
    return (
        <div>
            <h1>Sign Up</h1>
            <Formik
                initialValues={{
                    picked: ""
                }}
                onSubmit={async (values) => {
                    setIcon(values.picked);
                }}
            >
                {({ values }) => (
                    <Form>
                        <div id="my-radio-group">Picked</div>
                        <div role="group" aria-labelledby="my-radio-group">
                            <label>
                                <Field type="radio" name="picked" value="Apple" />
                                <AiFillApple />
                            </label>
                            <label>
                                <Field type="radio" name="picked" value="Google" />
                                <AiOutlineGoogle />
                            </label>
                        </div>
                        <button type="submit">Submit</button>
                    </Form>
                )}
            </Formik>
            You work at:{icon}
        </div>
    );
}

在第12行,我们告诉Formik,如果表单没有被提交,那么从这个表单返回的值就是一个空白字符串。然后从第14行到第17行,我们告诉React,当用户提交表单时,将icon Hook设置为选定的值。

后来在第23-29行,我们创建了我们的radio 按钮。它们都将name 属性设置为picked ,这样Formik就可以识别这些元素并检索表单的提交值。

最后,在第35行我们显示了icon 元素的值。

Apple and Google Icons with Radio Buttons

图标配置

请注意,在我们的应用程序中,到目前为止,所有渲染的图标都是微不足道的。幸运的是,React图标库允许我们自定义这些图标的大小和颜色。

颜色

要做到这一点,你将需要使用React的Context API。首先,创建一个单独的组件来设计你的图标。

import { IconContext } from "react-icons";

export default function ConfigIcon({ children }) {

    return (
        <>
            <IconContext.Provider value={{ color: "green" }}>
                {children}
            </IconContext.Provider>
        </>
    );
}

根据第7行,IconContext.Provider 将改变我们图标的属性。在这里,我们已经指定color 属性将是green

最后,在第8行,我们告诉React去渲染GreenIcon 组件的子元素。这意味着,如果你有一个图标作为GreenIcon 的子元素,那么你的图标将是绿色的。

现在是使用我们的组件的时候了。

import "./styles.css";
import GreenIcon from "./GreenIcon";
import { AiFillFastForward } from "react-icons/ai";
export default function App() {
    return (
        <div className="App">
            <ConfigIcon>
                <AiFillFastForward />
            </ConfigIcon>
        </div>
    );
}

我们的AiFillFastForward 组件现在将是绿色的了。

Small Green Arrows

尺寸

return (
    <>
        <IconContext.Provider value={{ color: "green", size: "4em" }}>
            {children}
        </IconContext.Provider>
    </>
);

在第3行,我们将大小设置为4em 。默认的图标尺寸是1em

Large Green Arrows

现在,定制的图标看起来更大、更好了

所有的代码例子都在CodeSandbox中

总结

React Icon库使用起来绝对是轻而易举。它不仅提供了你的项目所需的所有流行的图标,而且速度极快,体积极小,可以保证你的应用程序完全不滞后。

非常感谢您的阅读!