#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
, если вы считаете, что это вам не поможет