【问题标题】:FlatList Pagination with ReactHooks使用 React Hooks 的 FlatList 分页
【发布时间】:2020-06-10 16:32:34
【问题描述】:

我有一个简单的列表,滚动到底部时需要分页。目前初始数据数组工作没有任何问题。但是当我想将下一个数组附加到现有数组时,问题就来了。 numberList 被新数组替换。但不知道如何附加到它。 下面是我的实现。

export default function Numbers({ route, navigation }) {
  const dispatch = useDispatch();
  const { url } = route.params;

  const numberList = Object.values(
    useSelector(state => state.numberReducer.numbers),
  );

  const [count, setCount] = useState(2);

  useEffect(() => {
    console.log('URL ', url);
    dispatch(numberActions.requestNumbers(url));
  }, []);


  const fetchMore = () => {
    console.log('Fetch More');
    setCount(count + 1);
    const newUrl = "Another URL depending on the Count number";

    /** This also gets fired. problem is New Number list gets replaced to numberList. dont know how to append **/
    dispatch(numberActions.requestNumbers(newUrl));
  };

  const renderNumber = numberObject => {
    return (
      <Text>
        {numberObject.item.title}
      </Text>
    );
  };

  return (
    <SafeAreaView>
      <FlatList
        data={numberList}
        keyExtractor={(item, index) => item.title}
        renderItem={renderNumber}
        horizontal={false}
        onEndReached={fetchMore}
        onEndReachedThreshold={0.1}
      />
    </SafeAreaView>
  );
}

我的减速器

const initialState = {
  numbers: [],
};

export const numberReducer = createReducer(initialState, {
  [types.NUMBER_RESPONSE](state, action) {
    return {
      ...state,
      numbers: action.response,
    };
  },
});

【问题讨论】:

    标签: reactjs react-native react-redux react-hooks


    【解决方案1】:

    我不确定这是否是问题所在,如果您能提供一个我可以运行的完整示例,我可以尝试为您提供更多帮助。

    假设调用 fetchMore 后会在你的 reducer 中以 types.NUMBER_RESPONSE 结束,action.response 包含要添加的数字,看起来你正在覆盖旧数字。

    你可以尝试更换你的reducer而不是

     return {
          ...state,
          numbers: action.response,
        };
    

    试试

     return {
          ...state,
          numbers: [...state.numbers, ...action.response]
        };
    

    或任何其他将数字添加到旧 state.numbers 的东西

    【讨论】:

    • 正确。 numbers: [...state.numbers, ...action.response] 这行得通。问题是,那我怎样才能回到初始状态呢?我是否需要触发另一个动作以使减速器再次变为 numbers: []
    • 您可以将其拆分为两个不同的操作,一个将数字添加到状态,另一个将重置它/将其设置为特定值(然后发送 [])
    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2021-10-12
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多