如何解决在另一个组件/反应图标中更改组件
我正在构建一个评级组件,该组件接收多个图标并使用 react-icons
显示它们。但是,我的问题是针对我想实现的功能。目前,我使用的反应图标是 FaStarhalf
,它是一个预填充的半星,我翻转它以制造出我创造了半星的错觉。这很容易使用并且可以完成我需要它做的事情,但是,我想在您选择星星时实现一种更好的显示方式。不幸的是,react-icons
似乎无法让我一直填充图标。 faregStarHalf
是来自 react-icons
的另一个组件,它基本上是从星星上剪下来的,但是,您无法填充它。
所以我想问你。是否有可能在我的 FaStarHalf
组件内,当它被点击时,将每个 FaStarHalf
更改为它从 react-icons
填充的对应物?我可以从内部将组件更改为不同的组件吗?
Rater
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
FaHalfStar
faregHalfStar
解决方法
没有看到您正在处理的数据看起来像这样很难回答,但我会试一试。我假设您想要的是当用户单击一颗星星将评分设置在 1 到 5 之间时,您希望以填充星星的形式向他们显示他们的评分。如果是这种情况,您可以使用 rating
来确定是向用户显示当前评级还是他们设置的评级,然后根据需要使用适当的图标。
这可以通过将正确的字符串设置为变量然后使用它代替您的图标 JSX 标记名称来实现。基本上,如果用户设置了评分,rating
将不再是 null
,您可以断言您需要填充星星。使用该逻辑将变量分配给您想要的字符串。 const Star = rating ? 'FaStar' : 'FaHalfStar'
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
,
我能够弄清楚,使用与@CaseyC 使用的代码类似的代码,我需要找到填充的相应半星,而不是我尝试使用的完整星
import React,{ useState } from 'react'
import { FaRegStarHalf,FaStarHalf } from 'react-icons/fa'
import './styles/Rater.css'
const Rater = ({ iconCount }) => {
const [rating,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),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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。