J'ai le composant suivant qui déclenche une erreur ESlint no-shadow
sur les props
de FilterButton
.
import { setFilter } from '../actions/filter';
function FilterButton({ setFilter }) {
return (
Click
);
}
export default connect(null, { setFilter })(FilterButton);
Comment puis-je éviter l'avertissement tout en conservant à la fois la syntaxe concise de mapDispatchToProps
et la règle ESlint ?
Je sais que je peux ajouter un commentaire pour supprimer l'avertissement mais le faire pour chaque composant semble redondant et fastidieux.
0 votes
Vous pouvez renommer
setFilter
(FilterButton({ setFilter })
enFilterButton({ setFilter })
). Cela a du sens (en quelque sorte) car la fonction qui se trouve dans les proprétés deFilterButton
est en réalité l'originalesetFilter
avec la fonctiondispatch
qui lui est liée.0 votes
Avant et après le renommage sont les mêmes.
0 votes
Je voulais simplement renommer dans
function FilterButton({ setFilter }) {
etCliquez
. Pouvez-vous mettre à jour votre question avec le code modifié?0 votes
Je ne peux pas le renommer en
function FilterButton({ setFilter })
car il doit correspondre au nom de la propriété qui est en faitsetFilter
.3 votes
Ne pouvez-vous pas simplement réaffecter lorsque vous le passez à la fonction sur la ligne d'exportation ? Ainsi,
export default connect(null, {filter: setFilter})(FilterButton);
et ensuite juste au-dessus de celafunction FilterButton ({filter}) {
(ou tout autre nom de variable que vous préférez). De cette façon, vous ne masquez pas la variable dans la portée supérieure, et c'est clair en regardant le code.0 votes
Dans ce cas, je perdrais la syntaxe concise d'ES6.
0 votes
Ce serait génial s'il existait un plugin eslint forké qui désactive no-shadow juste pour ce cas d'utilisation particulier. J'apprécie no-shadow en principe mais ce code est bien meilleur que les alternatives.
0 votes
Un problème similaire (avec des solutions similaires) existe pour
mapStateToProps
lors de l'utilisation decreateStructuredSelector
de reselect avec des noms identiques pour les propriétés et les sélecteurs. Exemple:connect(createStructuredSelector({ filter }), null)(Component)