0

我有一个带有 listHeaderComponent 和 listFooterComponent 的 flatList。用户添加 listItem 后,我需要将焦点放在 listFooterComponent 上。

<StyledList
      data={data}
      keyExtractor={item => item.name}
      renderItem={({item, index}) => {
        console.log('index: ' + index);
        return <FlowerListItem item={item} />;
      }}
      ListHeaderComponent={() => {
        if (isFlowerList) {
          return (
            <DiaryFlowerHeader
              onPress={onPress}
              goBack={goBack}
              focusNext={focusNext}
            />
          );
        }
      }}
      ListFooterComponent={() => {
        if (isFlowerList) {
          return <DiaryFlowerFooter ref={reference} data={data} />;
        }
      }}
    />

在页脚上,我创建了这个 forwardRef,以便稍后提供焦点。

const NextButton = React.forwardRef((props, ref) => (
    <Button
      title="next"
      hasBackgroundColor={true}
      onPress={() => {
        onPress();
      }}
      ref={ref}
    />
  ));

  if (data && data.length > 0) {
    return (
      <Container>
        <ButtonView>
          <NextButton ref={reference} />
        </ButtonView>
      </Container>
    );
  }

在主页和 nextFocus 函数上创建引用,以将焦点放在我的按钮上。

const ref = React.createRef();
  const focusNext = () => {
    ref.current.focus();
  };

  return (
    <List
      data={flowers}
      onPress={addFlower}
      goBack={navigationGoBack}
      isFlowerList
      reference={ref}
      focusNext={focusNext}
    />
  );

但是 ref 总是未定义并且在尝试给予焦点时崩溃。

4

0 回答 0