条件渲染在 Chrome 中不起作用
Conditional rendering doesn't work in Chrome
我想像这样在我的反应组件中有条件地渲染图像:{noTasks && <Image />}
它在 Firefox 中工作得很好,但在 Chrome 中却不行,即使 Chrome 也检测到 noTasks === true。我在这里错过了什么?
<Image />
本身没有任何特殊的样式或定位
import React from 'react'
import styled from 'styled-components'
const StyledImg = styled.img`
width: 80%;
margin-bottom: 50px;
`
const Image = () => <StyledImg src='/assets/toDo.webp' alt='a woman with a task planner' />
export default Image
const ToDos = () => {
const tasks = useSelector((state) => state.todos.items)
const noTasks = useSelector((state) => state.todos.items.length === 0)
const dispatch = useDispatch()
const trashCanIcon = <FontAwesomeIcon icon={faTrashAlt} />
/* const editIcon = <FontAwesomeIcon icon={faPen} /> */
const onToggleIsComplete = (id) => {
dispatch(todos.actions.toggleIsComplete(id))
}
return (
<ContainerDiv>
{noTasks && <Image />}
{tasks.map((task) => (
<StyledForm
key={task.id}
category={task.category}
completed={task.isComplete}
>
<ToDoLabel
completed={task.isComplete}
htmlFor='completed'>{task.task}
</ToDoLabel>
<div>
<input
id='completed'
type='checkbox'
onChange={() => onToggleIsComplete(task.id)}
/>
{/* <button >{editIcon}</button> */}
<button onClick={() => dispatch(todos.actions.removeToDo(task.id))}> {trashCanIcon}</button>
</div>
<StyledParagraph>{moment(task.newDate).format("D. MM. YYYY")}</StyledParagraph>
</StyledForm>
))}
</ContainerDiv>
)
}
根据您的描述,问题可能与 <Image />
组件的实施有关。
您可以使用开发人员工具检查页面的源代码,以了解 React 如何呈现 ToDos
组件(右键单击 --> 检查 Chrome)。你能确认你是否已经这样做了吗?
我的猜测是,呈现 Image
组件的内容可能是样式问题(页面源代码中有一个 img
标记),但样式设置方式它是不可见的。例如,它可以绝对定位,这在某些情况下会导致浏览器之间的行为不同。
它也可能是由 <Image />
组件中的一些实现细节引起的。通过提供更多关于 <Image />
组件的上下文,以下帮助者可能更容易找到问题的可能原因。
我想像这样在我的反应组件中有条件地渲染图像:{noTasks && <Image />}
它在 Firefox 中工作得很好,但在 Chrome 中却不行,即使 Chrome 也检测到 noTasks === true。我在这里错过了什么?
<Image />
本身没有任何特殊的样式或定位
import React from 'react'
import styled from 'styled-components'
const StyledImg = styled.img`
width: 80%;
margin-bottom: 50px;
`
const Image = () => <StyledImg src='/assets/toDo.webp' alt='a woman with a task planner' />
export default Image
const ToDos = () => {
const tasks = useSelector((state) => state.todos.items)
const noTasks = useSelector((state) => state.todos.items.length === 0)
const dispatch = useDispatch()
const trashCanIcon = <FontAwesomeIcon icon={faTrashAlt} />
/* const editIcon = <FontAwesomeIcon icon={faPen} /> */
const onToggleIsComplete = (id) => {
dispatch(todos.actions.toggleIsComplete(id))
}
return (
<ContainerDiv>
{noTasks && <Image />}
{tasks.map((task) => (
<StyledForm
key={task.id}
category={task.category}
completed={task.isComplete}
>
<ToDoLabel
completed={task.isComplete}
htmlFor='completed'>{task.task}
</ToDoLabel>
<div>
<input
id='completed'
type='checkbox'
onChange={() => onToggleIsComplete(task.id)}
/>
{/* <button >{editIcon}</button> */}
<button onClick={() => dispatch(todos.actions.removeToDo(task.id))}> {trashCanIcon}</button>
</div>
<StyledParagraph>{moment(task.newDate).format("D. MM. YYYY")}</StyledParagraph>
</StyledForm>
))}
</ContainerDiv>
)
}
根据您的描述,问题可能与 <Image />
组件的实施有关。
您可以使用开发人员工具检查页面的源代码,以了解 React 如何呈现 ToDos
组件(右键单击 --> 检查 Chrome)。你能确认你是否已经这样做了吗?
我的猜测是,呈现 Image
组件的内容可能是样式问题(页面源代码中有一个 img
标记),但样式设置方式它是不可见的。例如,它可以绝对定位,这在某些情况下会导致浏览器之间的行为不同。
它也可能是由 <Image />
组件中的一些实现细节引起的。通过提供更多关于 <Image />
组件的上下文,以下帮助者可能更容易找到问题的可能原因。