Material UI 评价环绕长值
Material UI Rating wrapping long values
我目前正在尝试解决 Material UI 评级组件以及如何在图标溢出父组件的 width
时执行 flex-wrap
。
如果我尝试将 flex-wrap: wrap
添加到评级组件,它实际上会包装图标,但交互功能在第一行后停止工作。
下面是一个代码示例,可以更好地说明这一点:
有没有办法让它与 flex-wrap
一起使用?如果有人能提供帮助,我将不胜感激。
我决定如果最大值很大,最好自己构建一个具有包装能力的。
将它留在此处,以便可能与我有相同问题的人可以使用它。
CustomRating.js
import React, { useState } from 'react'
import { Tooltip } from '@mui/material'
import './CustomRating.css'
function CustomRating({ max, value, onChange, icon, emptyIcon }) {
const [innerValue, setInnerValue] = useState(value)
const checkIfIconInsideValue = (index) => {
return value >= index + 1
}
const handleMouseHover = (e, index) => {
if (e.type === 'mouseenter') {
setInnerValue(index)
return
}
setInnerValue(value - 1)
}
return (
<Tooltip title={innerValue} placement='top'>
<div className='custom-rating-main-div'>
{Array.from({ length: max }).map((elem, index) => {
return (
<div
className={`custom-rating-icon-div ${checkIfIconInsideValue(index) ? 'filled' : ''}`}
key={index}
onClick={() => onChange(index + 1)}
onMouseEnter={(e) => handleMouseHover(e, index)}
onMouseLeave={(e) => handleMouseHover(e, index)}
>
{checkIfIconInsideValue(index) || innerValue >= index ? icon : emptyIcon}
</div>
)
})}
</div>
</Tooltip>
)
}
export default CustomRating
CustomRating.css
.custom-rating-main-div {
display: flex;
flex-wrap: wrap;
}
.custom-rating-icon-div {
cursor: pointer;
}
.custom-rating-icon-div.filled > svg {
fill: #61634f
}
.custom-rating-icon-div > svg {
fill: rgba(97, 99, 79, 0.5)
}
.custom-rating-icon-div:hover > svg {
fill: #61634f;
transform: scale(1.2);
}
正如您可能注意到的那样,这是针对我的问题的,但可以很容易地适应任何情况。
请记住,这是非常粗糙的,可以更新以更好地遵循约定并获得更好的性能,但现在这是我的解决方案
我目前正在尝试解决 Material UI 评级组件以及如何在图标溢出父组件的 width
时执行 flex-wrap
。
如果我尝试将 flex-wrap: wrap
添加到评级组件,它实际上会包装图标,但交互功能在第一行后停止工作。
下面是一个代码示例,可以更好地说明这一点:
有没有办法让它与 flex-wrap
一起使用?如果有人能提供帮助,我将不胜感激。
我决定如果最大值很大,最好自己构建一个具有包装能力的。
将它留在此处,以便可能与我有相同问题的人可以使用它。
CustomRating.js
import React, { useState } from 'react'
import { Tooltip } from '@mui/material'
import './CustomRating.css'
function CustomRating({ max, value, onChange, icon, emptyIcon }) {
const [innerValue, setInnerValue] = useState(value)
const checkIfIconInsideValue = (index) => {
return value >= index + 1
}
const handleMouseHover = (e, index) => {
if (e.type === 'mouseenter') {
setInnerValue(index)
return
}
setInnerValue(value - 1)
}
return (
<Tooltip title={innerValue} placement='top'>
<div className='custom-rating-main-div'>
{Array.from({ length: max }).map((elem, index) => {
return (
<div
className={`custom-rating-icon-div ${checkIfIconInsideValue(index) ? 'filled' : ''}`}
key={index}
onClick={() => onChange(index + 1)}
onMouseEnter={(e) => handleMouseHover(e, index)}
onMouseLeave={(e) => handleMouseHover(e, index)}
>
{checkIfIconInsideValue(index) || innerValue >= index ? icon : emptyIcon}
</div>
)
})}
</div>
</Tooltip>
)
}
export default CustomRating
CustomRating.css
.custom-rating-main-div {
display: flex;
flex-wrap: wrap;
}
.custom-rating-icon-div {
cursor: pointer;
}
.custom-rating-icon-div.filled > svg {
fill: #61634f
}
.custom-rating-icon-div > svg {
fill: rgba(97, 99, 79, 0.5)
}
.custom-rating-icon-div:hover > svg {
fill: #61634f;
transform: scale(1.2);
}
正如您可能注意到的那样,这是针对我的问题的,但可以很容易地适应任何情况。
请记住,这是非常粗糙的,可以更新以更好地遵循约定并获得更好的性能,但现在这是我的解决方案