如何根据道具有条件地渲染我的组件的颜色?
How do I conditionally render the color of my component based on the prop?
我的组件的颜色根据 prop 'level' 的值而变化。当我尝试使用状态设置 backgroundColor 时,我意识到所有组件都具有相同的颜色,因为每个评论的状态都在不断变化。我尝试使用引用和状态来解决这个问题,但是我无法解决问题,因为代码似乎工作相同。任何帮助都会很棒,谢谢。
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,
}
您可以使用 useEffect
的第二个参数来告诉它何时 运行 (by default it runs on each update)。我假设你想根据你的代码将 level
作为你的第二个参数传递,这样 useEffect
运行 仅在 level
更新时。
使用 useEffect
和第二个参数的格式如下:
useEffect(() => {
console.log(state);
//value of state is used here therefore must be passed as a dependency
}, [state])
我会删除 state、useEffect 和 ref,因为它们会使组件过于复杂。
而是根据级别的值设置背景颜色。最好的方法与您在 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(),
}
我的组件的颜色根据 prop 'level' 的值而变化。当我尝试使用状态设置 backgroundColor 时,我意识到所有组件都具有相同的颜色,因为每个评论的状态都在不断变化。我尝试使用引用和状态来解决这个问题,但是我无法解决问题,因为代码似乎工作相同。任何帮助都会很棒,谢谢。
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,
}
您可以使用 useEffect
的第二个参数来告诉它何时 运行 (by default it runs on each update)。我假设你想根据你的代码将 level
作为你的第二个参数传递,这样 useEffect
运行 仅在 level
更新时。
使用 useEffect
和第二个参数的格式如下:
useEffect(() => {
console.log(state);
//value of state is used here therefore must be passed as a dependency
}, [state])
我会删除 state、useEffect 和 ref,因为它们会使组件过于复杂。
而是根据级别的值设置背景颜色。最好的方法与您在 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(),
}