如何根据 prop 有条件地渲染组件的颜色?

Posted

技术标签:

【中文标题】如何根据 prop 有条件地渲染组件的颜色?【英文标题】:How do I conditionally render the color of my component based on the prop? 【发布时间】:2022-01-10 03:37:27 【问题描述】:

我的组件的颜色会根据道具“级别”的值而变化。当我尝试使用状态设置背景颜色时,我意识到所有组件都具有相同的颜色,因为状态会随着每条评论的变化而不断变化。我尝试使用引用和状态来解决这个问题,但是我无法解决问题,因为代码似乎工作相同。任何帮助都会很棒,谢谢。

function CommentMargin(level) 


const [marginColorState, setMarginColorState] = useState(colors.lightPurple);
const marginColor = useRef(null);

useEffect(() =>
       
        switch (level) 
            case 1:
                
                setMarginColorState(colors.lightPurple);
                marginColor(marginColorState);
        
            case 2:
                
                setMarginColorState(colors.crimson);
                marginColor(marginColorState);

            case 3:
                
                setMarginColorState(colors.orange);
                marginColor(marginColorState);

            case 4:
                
                setMarginColorState(colors.yellow);
                marginColor(marginColorState);

        



    


)


return (
    <View style=styles(marginColor).container>

    </View>
);

export default CommentMargin;
const styles = (marginColor) => StyleSheet.create(
    container:
        backgroundColor: marginColor.current,
        

【问题讨论】:

【参考方案1】:

我会删除 state、useEffect 和 ref,因为它们使组件过于复杂。

而是根据 level 的值设置背景颜色。最好的方法与您在 useEffect 中所做的类似,但将其放入常规函数中。

类似:

const getBackgroundColor = () =>
        switch (level) 
          case 1:
            return colors.lightPurple
          case 2:
            return colors.crimson
          case 3:
           return colors.orange
          case 4:
            return colors.yellow
      


const styles = () => StyleSheet.create(
    container:
        backgroundColor: getBackgroundColor(),

【讨论】:

【参考方案2】:

您可以使用useEffect 的第二个参数来告诉它何时运行(by default it runs on each update)。我假设您想根据您的代码将level 作为第二个参数传递,以便useEffect 仅在level 更新时运行。

useEffect 与第二个 arg 一起使用的格式如下:

         useEffect(() => 
              console.log(state); 
              //value of state is used here therefore must be passed as a dependency
         , [state])

【讨论】:

感谢您的帮助

以上是关于如何根据 prop 有条件地渲染组件的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS 7 - 如何根据其值有条件地仅更改表格单元格(而不是行)的背景颜色?

如何根据 s-s-rS 中单独字段的值有条件地格式化整行的文本颜色?

React学习:条件渲染

如何根据用户的操作系统有条件地渲染 ReactJS 内容

根据 props 有条件地在组件上应用实用程序类的最佳方法

如何根据 props 的值渲染组件?