React Hook的“ useReducer”被有条件地调用在每个组件渲染中必须以完全相同的顺序调用React Hooks

问题描述

我有一个组件变量声明,并且useEffect和useReducer看起来像这样

const editItemData =
  props.location && props.location.query && props.location.query.itemData
    ? props.location.query.itemData
    : '';
const edit_item_meetup1 =
  editItemData && editItemData.s_dm_meetup_add1
    ? editItemData.s_dm_meetup_add1
    : '';
const edit_item_meetup2 = editItemData
  ? editItemData.s_dm_meetup_add2
    ? editItemData.s_dm_meetup_add2
    : ''
  : '';
const edit_category_id =
  editItemData &&
  editItemData.oc_t_category &&
  editItemData.oc_t_category.pk_i_id
    ? editItemData.oc_t_category.pk_i_id
    : '';
const edit_item_price =
  editItemData && editItemData.i_price ? editItemData.i_price : '';

const [userInput,setUserInput] = useReducer(
  (state,newState) => ({...state,...newState}),{
    s_category: isFromEdit ? edit_category_id : '',fk_i_category_id: isFromEdit ? edit_category_id : '',i_price: isFromEdit ? edit_item_price / 1000000 : '',s_title: isFromEdit ? edit_item_title : '',item_condition: isFromEdit ? edit_item_condition : '',formIsComplete: false,deal_method_meetup: isFromEdit ? edit_item_meetup1 : '',deal_method_shipped: isFromEdit ? edit_item_shipped_details : '',s_dm_shipped_details: isFromEdit ? edit_item_shipped_details : '',s_dm_meetup_add1: isFromEdit ? edit_item_meetup1 : '',s_dm_meetup_add2: isFromEdit ? edit_item_meetup2 : '',totalLocation: isFromEdit
      ? edit_item_meetup1
        ? edit_item_meetup2
          ? 2
          : 1
        : 0
      : '',s_description: isFromEdit ? edit_item_description : '',submitItemDetails: [],itemLink: '',youtube_link: isFromEdit ? yt_link_final : '',boost: '',taDetails: [],hlDetails: [],item_id: isFromEdit ? edit_item_id : '',subBoost: 0,boostTotal: 0,boostAppliedTotal: 0,highlight: '',subHighlight: 0,shippingDetails: '',highlightTotal: 0,meetupAddnotesAddress1: isFromEdit ? edit_item_meetup1_notes : '',meetupAddnotesAddress2: isFromEdit ? edit_item_meetup2_notes : '',error: {
      name: '',price: '',description: '',image: '',item_condition: '',category: '',meetup: '',yt_link: '',},raw_address: '',captcha: '',inputError: '',custom_fields: {},);

useEffect(() => {
  window.scrollTo(0,0);
  getServices(true);
  if (userId && !isFromEdit) {
    props.meLoad({id: userId});
  }
  if (isFromEdit) {
    setMainFunc({['submitLoading']: true});
    edit_user_purchases.map((boost) => {
      if (boost.type === 'highlight' || boost.type === 'top_ad') {
        const exp_date = moment(boost.created_at).add(boost.service.days,'d');
        if (moment().isSameOrBefore(exp_date)) {
          activeBoostArr.push(boost);
        }
      }
    });
  }
},[userId,isFromEdit]);
useEffect(() => {
  setUserInput({['subBoost']: dPremiumId[0]});
  if (activeBoostArr.length !== 0) {
    setTimeout(() => {
      activeBoostArr.map((boost) => {
        if (boost.type === 'top_ad') {
          setUserInput({
            ['subBoost']: boost.service.id,['taDetails']: boost.service,});
          setMainFunc({['premiumClick']: true});
        } else {
          setUserInput({
            ['subHighlight']: boost.service.id,['hlDetails']: boost.service,});
          setMainFunc({['highlightClick']: true});
        }
      });
    },1500);
  }
},[]);

试图将useReducer移到上部,错误消息消失了,但是在重新加载几次后错误仍然存​​在。 我不知道我的错在哪里,并且此错误不断显示,有人可以在这里帮助我吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)