首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改另一个组件内的组件/react-icons

更改另一个组件内的组件/react-icons
EN

Stack Overflow用户
提问于 2020-12-19 06:00:44
回答 2查看 99关注 0票数 0

我正在构建一个评级组件,它接受一些图标并使用react-icons显示它们。然而,我的问题是关于我想实现的一个功能。目前,我正在使用的react图标是FaStarhalf,它是一个预先填充的半星,我翻转它来制造我已经创建了半星的错觉。这是非常容易使用,并做我需要它做的事情,然而,我想实现一个更好的方式来显示时,您正在选择一颗星。不幸的是,react-icons似乎不具备让我完全填充图标的能力。FaRegStarHalfreact-icons的另一个组件,它基本上是一个星形的裁剪,但是,你不能填充它。

所以我要问你一个问题。在我的FaStarHalf组件中,当它被点击时,有没有可能将每个FaStarHalf更改为它在react-icons中填充的副本?我可以将一个组件从其内部更改为不同的组件吗?

Rater

代码语言:javascript
复制
import React, { useState } from 'react'
import { FaStarHalf } from 'react-icons/fa'

import './styles/Rater.css'

const Rater = ({ iconCount }) => {
    const [rating, setRating] = useState(null)
    const [hover, setHover] = useState(null)
    return (
        <div>
            {[...Array(iconCount), ...Array(iconCount)].map((icon, i) => {
                const value = (i + 1) / 2

                return (
                    <label>
                        <input
                            type='radio'
                            name='rating'
                            value={value}
                            onClick={() => {
                                console.log(`value => `, value)
                                return setRating(value)
                            }}
                        />
                        <div className='star-container'>
                            <div>
                                <FaStarHalf
                                    className={i % 2 ? 'star-left' : 'star'}
                                    color={value <= (hover || rating) ? '#ffc107' : '#e4e5e9'}
                                    onMouseEnter={() => setHover(value)}
                                    onMouseLeave={() => setHover(null)}
                                />
                            </div>
                        </div>
                    </label>
                )
            })}
        </div>
    )
}

export default Rater
代码语言:javascript
复制
FaHalfStar

代码语言:javascript
复制
FaRegHalfStar

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-19 07:47:21

在看不到您正在处理的数据看起来像什么的情况下,这很难回答,但我会尝试一下。我假设你想要的是,当用户点击一颗星来设置一个介于1和5之间的评级时,你想要以填充的星的形式向他们显示他们的评级。如果是这种情况,您可以使用rating来确定是否向用户显示当前评级或他们设置的评级,然后根据需要使用适当的图标。

这可以通过将适当的字符串设置为变量,然后使用该字符串代替您的图标JSX标记名来实现。基本上,如果用户设置了评级,rating将不再是null,您可以断言您需要填充星级。使用该逻辑将变量分配给所需的字符串。const Star = rating ? 'FaStar' : 'FaHalfStar'

代码语言:javascript
复制
import React, { useState } from 'react'
import { FaStarHalf, FaStar } from 'react-icons/fa'

import './styles/Rater.css'

const Rater = ({ iconCount }) => {
    const [rating, setRating] = useState(null)
    const [hover, setHover] = useState(null)
    // check if user has set a rating by clicking a star and use rating to determine icons
    const Star = rating ? 'FaStar' : 'FaHalfStar'

return (
    <div>
        {[...Array(iconCount), ...Array(iconCount)].map((icon, i) => {
            const value = (i + 1) / 2              
            
            return (
                <label>
                    <input
                        type='radio'
                        name='rating'
                        value={value}
                        onClick={() => {
                            console.log(`value => `, value)
                            return setRating(value)
                        }}
                    />
                    <div className='star-container'>
                        <div>
                            // Use 'Star' variable here which is assigned 'FaStar' or 'FaHalfStar' and will display a half star or a full star
                            <Star
                                className={i % 2 ? 'star-left' : 'star'}
                                color={value <= (hover || rating) ? '#ffc107' : '#e4e5e9'}
                                onMouseEnter={() => setHover(value)}
                                onMouseLeave={() => setHover(null)}
                            />
                        </div>
                    </div>
                </label>
            )
        })}
    </div>
)
}

export default Rater
FaHalfStar
票数 1
EN

Stack Overflow用户

发布于 2020-12-19 08:30:08

我使用类似于@CaseyC所使用的代码来解决这个问题,我需要找到相应的已填写的半星,而不是我试图使用的全星

代码语言:javascript
复制
import React, { useState } from 'react'
import { FaRegStarHalf, FaStarHalf } from 'react-icons/fa'

import './styles/Rater.css'

const Rater = ({ iconCount }) => {
    const [rating, setRating] = useState(null)
    const [hover, setHover] = useState(null)
    // check if user has set a rating by clicking a star and use rating to determine icons
    const Star = rating ? FaStarHalf : FaRegStarHalf

    return (
        <div>
            {[...Array(iconCount), ...Array(iconCount)].map((icon, i) => {
                const value = (i + 1) / 2

                return (
                    <label>
                        <input
                            type='radio'
                            name='rating'
                            value={value}
                            onClick={() => {
                                console.log(`value => `, value)
                                return setRating(value)
                            }}
                        />
                        <div className='star-container'>
                            <div>
                                <Star
                                    className={i % 2 ? 'star-left' : 'star'}
                                    color={value <= (hover || rating) ? '#ffc107' : '#e4e5e9'}
                                    onMouseEnter={() => setHover(value)}
                                    onMouseLeave={() => setHover(null)}
                                />
                            </div>
                        </div>
                    </label>
                )
            })}
        </div>
    )
}

export default Rater
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65364475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档