Передаю массив в качестве реквизита, определяю prop-types как массив, но там говорится, что я передаю объект

#reactjs #react-proptypes

#reactjs #react-proptypes

Вопрос:

Я пытаюсь получить доступ к массиву моего редуктора и отобразить его в качестве реквизита. Это работало нормально, но когда я попытался стандартизировать свой код с помощью ESLint, мне нужно было определить свои типы реквизитов, и я сделал это в виде массива.

Затем я получаю сообщение об ошибке: Warning: Failed prop type: Invalid prop 'articles_list' of type 'array' supplied to 'Content', expected 'object' .

Я искал его и обнаружил, что у людей возникли проблемы с маршрутизатором, им посоветовали попробовать бета-версию маршрутизатора … но это работало до ESLint. Я не вижу, что не так… Я даже сомневаюсь в своем понимании английского языка, ха-ха .. переключение prop-type на object, но все сработало.

В моем компоненте

 const mapStateToProps = state => ({
  articles_list: state.articles_list,
});

class Content extends Component {
  ...
}

Content.propTypes = {
  articles_list: PropTypes.shape([]),
};
Content.defaultProps = {
  articles_list: [],
};
  

В моем редукторе

 const initialState = {
  articles_list: [],
}

export const reducer = (state = initialState, action) => {
  switch (action.type) {
    case GET_ALL_ARTICLES_PAGE:
      return {
        ...state,
        articles_list: [...state.articles_list, action.payload],
      };
      [...]
  }
}
  

Ответ №1:

PropTypes.shape возвращает object , принимающий определенную форму

попробуйте выполнить следующее:

  Content.propTypes = {
      articles_list: PropTypes.arrayOf(PropTypes.shape(*your object shape*)),
    };
  

если ваш массив представляет собой массив чисел, попробуйте :

    Content.propTypes = {
          articles_list: PropTypes.arrayOf(PropTypes.number),
        };
  

Комментарии:

1. Приятно, что я не знал, что форма возвращает объект, это было действительно полезно. Я буду в курсе документации в следующий раз, ха-ха. Спасибо

Ответ №2:

вы пробовали это?

 Content.propTypes = {
  articles_list: PropTypes.array,
};
  

Или вы можете использовать это, если хотите определить форму массива

 Content.propTypes = {
  articles_list: PropTypes.arrayOf(
    PropTypes.shape({
      code: PropTypes.string,
      id: PropTypes.number,
    })
  ),
};
  

Прочитайте документацию обо всех доступных PropTypes здесь.

Комментарии:

1. да, я пробовал до этой ошибки, но поскольку ESLint жалуется на универсальные prop-types, я использовал этот способ… Но я попробовал сейчас, я думаю, это решило, хахаха … ошибка исчезла, но еще многое нужно исправить, ха-ха.. Но это очень помогло. Спасибо.

2. @MarcosDefina возможно, удалите эту проверку из eslintconfig , если вы считаете, что это вам не поможет