TypeError:无法读取未定义的属性(读取‘style’)
调试这个问题已经很久了。我试图让一组项目在单击时发生更改,但使用变换,但“样式”未定义。我还包含了卡片组件函数。非常感谢您的帮助
import React,{useRef} from 'react';
import { Card } from '../components';
import { CardItemContainer } from './card-item';
export function CardContainer()
{
const listRef=useRef()
const handleClick=(direction)=>
{
if(direction==="left")
{
listRef.current.style.transform=`translate(230)`
}
}
return(
<Card>
<Card.ListTitle> Continue to watch</Card.ListTitle>
<Card.Wrapper >
<Card.ArrowSliderLeft onClick={()=>handleClick('left')}/>
<Card.List ref={listRef}>
<CardItemContainer index={0}/>
<CardItemContainer index={1}/>
<CardItemContainer index={2}/>
<CardItemContainer index={3}/>
<CardItemContainer index={4}/>
<CardItemContainer index={5}/>
<CardItemContainer index={6}/>
</Card.List>
<Card.ArrowSliderRight onClick={() => handleClick("right")}/>
</Card.Wrapper>
</Card>
)
}
卡片组件
import {ArrowBackIosOutlined,ArrowForwardIosOutlined} from "@material-ui/icons";
import React, {} from 'react';
import {
Container,
List,
ListTitle,
Wrapper,
ArrowSliderLeft,
ArrowSliderRight
} from './styles/card';
export default function Card({ children, ...restProps }) {
return <Container {...restProps}>{children}</Container>
}
Card.ListTitle=function CardListTitle({children,...restProps})
{
return <ListTitle{...restProps}> {children} </ListTitle>
}
Card.Wrapper=function CardWrapper({children,...restProps})
{
return <Wrapper{...restProps} > {children} </Wrapper>
}
Card.List=function CardList({children,...restProps})
{
return <List{...restProps} >{children}</List>
}
Card.ArrowSliderLeft = function HeaderArrowBackIosOutlinedSymbol({...restProps })
{
return <ArrowSliderLeft {...restProps }>
{/*id allows me to style the icon directly */}
<ArrowBackIosOutlined id="sliderLeft"/>
</ArrowSliderLeft>
}
Card.ArrowSliderRight = function HeaderArrowForwardIosOutlinedSymbol({...restProps}) {
return (
<ArrowSliderRight {...restProps}>
<ArrowForwardIosOutlined id="sliderRight"/>
</ArrowSliderRight>
);
};
忽略 : 调试这个问题已经很久了。我试图让一组项目在单击时发生更改,但使用变换,但“样式”未定义。我还包含了卡片组件函数。非常感谢您的帮助
像
CardList
这样的函数组件没有 ref 属性,只有类组件或 DOM 元素才有。
您还没有发布
要将
现在您可以在此处传递
旁注
:取自 Drew Reese 对这个答案的评论,因为
同样的事情可以适用于
List
组件的实现,但我们假设它有一个
<ul>
标签,而这正是您最终需要操作其
.style.transform
CardList
>>>
List
>> ul(这是传递 ref 所需的元素)
listRef
从
CardList
一直传递到
ul
,您需要使用 forwardRef 技术。
Card.List=React.forwardRef(function CardList (props,ref)
{
const {children,...restProps} = props
return <List{...restProps} ref={ref} >{children}</List>
})
List
组件本身:
const List = React.forwardRef(function (props,ref) {
return <ul ref={ref}>
... the implementation of your List
listRef
,它会沿着链条传递:
<Card.List ref={listRef}>
CardList
只是将相同的 props 从父组件转移到
List
,您只需将
List
分配给
Card.List
,然后只有一个 ref 转发步骤足够:
Card.List = List // CardList component isn't used anymore.
Card.ListTitle
和
Card.Wrapper
:
Card.ListTitle=ListTitle
Card.Wrapper=Wrapper
我也遇到了同样的问题,并尝试让我的代码重新运行。检查您提供的代码和我的错误代码片段之间的相似性帮助我修复了错误。
奇怪的是,我在我的元素(
MUI
<
Snackbar
>
元素,在我的情况下)后面有一个 JSX 多行注释时遇到了此错误。
我的代码片段如下所示:
<Snackbar open={snackbarOpen} autoHideDuration={5000} onClose={()=>setSnackbar(false)} > {/* My Comment Here */}
<>...</>
</Snackbar>
JSX 注释的位置与您的卡片组件非常相似
Card.ArrowSliderLeft = function
...
return <ArrowSliderLeft {...restProps }>
{/*id allows me to style the icon directly */}
<ArrowBackIosOutlined ... />
</ArrowSliderLeft>
对于我来说,删除紧跟在开启标签后面的注释部分
就行了。
因此,请尝试删除您的 JSX 注释或将其放在其他地方,看看是否有帮助。
在这里分享仅供我和其他人将来参考。:)