我正在尝试从父组件控制子组件中的转盘。
我已经在子组件上使用了前向引用,但它不起作用。我哪里出错了?
家长:
const CoachingCarousel = ({}) => {
const carouselRef = useRef<Lottie>(null);
const renderItem = ({item}: any) => {
return (
<View style={styles.renderItemContainer}>
{item.icon}
<Text style={[styles.titletext, spacing.gbMt7]} variant="titleLarge">
{item.title}
</Text>
<Text style={[styles.subtitleText, spacing.gbMt4]} variant="bodyMedium">
{item.text}
</Text>
<Text
style={[styles.next]}
variant="bodyLarge"
onPress={() =>
carouselRef?.current?.goToSlide(
totalSlides !== item.key
? item.key
: () => {
setCoachingScreenCompleted('CoachingScreenCompleted', true),
console.log('Go to homepage');
},
)
}>
{totalSlides !== item.key ? 'Next tbc' : 'Done tbc'}
</Text>
</View>
);
};
return (
<AppCarousel slides={slides} renderItem={renderItem} ref={carouselRef} />
);
};
孩子:
const AppCarousel = React.forwardRef(
({style, slides, renderItem}: props, ref) => {
return (
<View style={[styles.container, style]}>
<AppIntroSlider
ref={ref}
renderItem={renderItem}
data={slides}
/>
</View>
);
},
);
1条答案
按热度按时间jv2fixgn1#
这是一个React规则,
答案
另外,从我所看到的情况来看,您正在使用
ref
来跟踪当前幻灯片。ref
不会在React中重新呈现,因此您不会看到您的更改。请尝试使用useState
。useRef
用于非重新呈现值或跟踪DOM节点,这在您的情况下是不必要的。我发现这个tutorial相当不错。一个批评者会认为
React.children.map
和React.children.clone
的使用过于复杂,尽管它们有自己的用例。