reactjs 如何在子元件/父元件之间使用相同的参照

tjvv9vkg  于 2023-02-03  发布在  React
关注(0)|答案(1)|浏览(116)

我正在尝试从父组件控制子组件中的转盘。
我已经在子组件上使用了前向引用,但它不起作用。我哪里出错了?

家长:

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>
    );
  },
);
jv2fixgn

jv2fixgn1#

这是一个React规则,

    • 1.**不要在其他组件中声明组件,这将导致React中非常奇怪的行为。
    • 2.此外,您不能同时在两个组件之间共享ref,无论它们是父/子组件还是同级组件。

答案

另外,从我所看到的情况来看,您正在使用ref来跟踪当前幻灯片。ref不会在React中重新呈现,因此您不会看到您的更改。请尝试使用useState
useRef用于非重新呈现值或跟踪DOM节点,这在您的情况下是不必要的。
我发现这个tutorial相当不错。一个批评者会认为React.children.mapReact.children.clone的使用过于复杂,尽管它们有自己的用例。

相关问题