J'ai le composant suivant qui déclenche un no-shadow
Erreur ESlint sur la page FilterButton
props
.
import { setFilter } from '../actions/filter';
function FilterButton({ setFilter }) {
return (
<button onClick={setFilter}>Click</button>
);
}
export default connect(null, { setFilter })(FilterButton);
Comment éviter l'avertissement tout en conservant 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 })
aFilterButton({ setFilter })
). C'est logique (en quelque sorte) parce que les fonctions qui sont dansFilterButton
Les accessoires de l'artiste sont en fait l'originalsetFilter
avec ledispatch
qui lui est liée.0 votes
Avant et après le changement de nom, les données sont identiques.
0 votes
Je voulais dire renommer uniquement dans
function FilterButton({ setFilter }) {
y<button onClick={setFilter}>Click</button>
. Pouvez-vous mettre à jour votre question avec le code modifié ?0 votes
Je ne peux pas le renommer dans
function FilterButton({ setFilter })
car il doit correspondre au nom de l'accessoire qui estsetFilter
en fait.3 votes
Ne peut-on pas simplement réaffecter les données en les transmettant à la fonction sur la ligne d'exportation ? Ainsi, il est possible de réaffecter le nom de la fonction à la ligne d'exportation,
export default connect(null, {filter: setFilter})(FilterButton);
et ensuite, au-dessus de cela, justefunction FilterButton ({filter}) {
(ou tout autre nom de variable que vous préférez). De cette façon, vous ne faites pas d'ombre à la variable dans la portée supérieure, ce qui est clair lorsque l'on regarde le code.0 votes
Dans ce cas, je perdrais la syntaxe concise de l'ES6
0 votes
Ce serait génial s'il y avait un plugin eslint forké qui désactivait le no-shadow juste pour ce cas d'utilisation particulier. J'aime bien le principe du no-shadow, mais ce code est bien plus joli que les autres.
0 votes
Un problème similaire (avec des solutions similaires) se pose pour
mapStateToProps
lors de l'utilisation decreateStructuredSelector
de resélectionner avec des noms identiques pour les accessoires et les sélecteurs. Exemple :connect(createStructuredSelector({ filter }), null)(Component)