برنامه نویسی

با کلیک بر روی React Component، متن را در کلیپ بورد کپی کنید

در یوتیوب تماشا کنید | 🐙 گیت هاب | 🎮 نسخه ی نمایشی

بیایید یک کامپوننت React زیبا بسازیم که با کلیک کردن، متن را در کلیپ بورد کپی می کند. یک نماد کپی را در پایان نشان می دهد که نشان می دهد می توانید با متن تعامل داشته باشید، هنگامی که ماوس را نگه دارید روشن تر می شود و با کلیک کردن، نماد کپی به یک نماد بررسی تبدیل می شود.

نمونه ای از ReactKit

این CopyText کامپوننت همان خصوصیات را دریافت می کند Text جزء پلاس content ویژگی که باید حاوی متنی برای کپی باشد. برای کسب اطلاعات بیشتر در مورد قابل استفاده مجدد Text جزء، این پست را بررسی کنید.

import { Text } from "lib/ui/Text"
import { CopyIcon } from "./icons/CopyIcon"
import styled from "styled-components"
import { getColor } from "./theme/getters"
import copy from "copy-to-clipboard"
import { defaultTransitionCSS } from "./animations/transitions"
import { useState } from "react"
import { Match } from "./Match"
import { CheckIcon } from "./icons/CheckIcon"

interface CopyTextProps extends React.ComponentProps<typeof Text> {
  content: string
}

const IconWr = styled(Text)`
  margin-left: 4px;
  ${defaultTransitionCSS};
  color: ${getColor("textSupporting3")};
`

const Container = styled(Text)`
  cursor: pointer;

  &:hover ${IconWr} {
    color: ${getColor("contrast")};
  }
`

type IconToShow = "copy" | "copied"

export const CopyText = ({ content, children, ...rest }: CopyTextProps) => {
  const [iconToShow, setIconToShow] = useState<IconToShow>("copy")

  return (
    <Container
      onMouseLeave={() => setIconToShow("copy")}
      onTouchEnd={() => setIconToShow("copy")}
      onClick={() => {
        copy(content)
        setIconToShow("copied")
      }}
      {...rest}
    >
      {children}
      <IconWr as="span">
        <Match
          value={iconToShow}
          copy={() => <CopyIcon />}
          copied={() => <CheckIcon />}
        />
      </IconWr>
    </Container>
  )
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این Container کامپوننت استایل های را تغییر می دهد Text جزء با اضافه کردن نشانگر به همراه افکت شناور که رنگ آن را تغییر می دهد IconWr جزء. داخل از Container ما بچه ها و IconWr مؤلفه ای که بسته به آن نماد کپی یا علامت چک را نشان می دهد iconToShow حالت. این Match کامپوننت یک کمک کننده ساده است که محتوا را بر اساس value ویژگی. جایگزین بهتری برای switch بیانیه.

import { ReactNode } from "react"

type MatchProps<T extends string | number | symbol> = Record<
  T,
  () => ReactNode
> & {
  value: T
}

export function Match<T extends string | number | symbol>(
  props: MatchProps<T>
) {
  const render = props[props.value]

  return <>{render()}</>
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای تجربه کاربری بهتر، ما آیکون کپی را به نماد چک در هنگام کلیک تغییر می‌دهیم و زمانی که کاربر ماوس را روی انگشت خود از صفحه لمسی خارج می‌کند، آن را به نماد کپی بازنشانی می‌کنیم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا