gajus / gajus/babel-plugin-react-css-modules
Compiled className get's overwritten by className from the props
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 2k
- Forks
- 159
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
Having two components, NavIconLink and AnchorDefault I pass styleName to the AnchorDefault, but also there might be a className from the props spread that will be passed as well.
In this case of className is passed - whatever was transformed from styleName to className get's overwritten by passed className from the spread.
import React from 'react';
import PropTypes from 'prop-types';
import {
AnchorDefault,
Icon,
} from '../../elements';
import styles from './NavIconLink.scss';
export const NavIconLink = ({
label,
icon,
...props
}) => (
<AnchorDefault
styleName="a-navicon-link"
activeClassName={styles['a-navicon-link--active']}
{...props}
>
<span className="u-visible-sml">
{label}
</span>
<span className="u-block-md">
<Icon
className="a-svg-medium"
icon={icon}
/>
</span>
</AnchorDefault>
);
NavIconLink.propTypes = {
label: PropTypes.string,
icon: PropTypes.string,
};
Compiled part
var NavIconLink = function NavIconLink(_ref) {
var label = _ref.label,
icon = _ref.icon,
props = _objectWithoutProperties(_ref, ["label", "icon"]);
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_elements__WEBPACK_IMPORTED_MODULE_2__[/* AnchorDefault */ "b"], _extends({
className: "a-navicon-link___36tEr" + (" " + (props ? props.className || "" : "")),
activeClassName: _NavIconLink_scss__WEBPACK_IMPORTED_MODULE_3___default.a['a-navicon-link--active']
}, props), _jsx("span", {
className: "u-visible-sml"
}, void 0, label), _jsx("span", {
className: "u-block-md"
}, void 0, _jsx(_elements__WEBPACK_IMPORTED_MODULE_2__[/* Icon */ "s"], {
className: "a-svg-medium",
icon: icon
})));
};
import React from 'react';
import PropTypes from 'prop-types';
import { NavLink } from 'react-router-dom';
export const AnchorDefault = ({
label,
onClick,
children,
disabled,
className,
openNewTab,
...other
}) => {
const LinkComponent = other.to
? NavLink
: other.href ? 'a' : 'button';
return (
<LinkComponent
onClick={onClick}
className={className}
disabled={disabled}
{...openNewTab && { target: '_blank' }}
{...openNewTab && { rel: 'noopener noreferrer' }}
{...other}
>
{children || label}
</LinkComponent>
);
};
AnchorDefault.propTypes = {
children: PropTypes.any,
label: PropTypes.string,
disabled: PropTypes.bool,
className: PropTypes.string,
href: PropTypes.string,
onClick: PropTypes.func,
openNewTab: PropTypes.bool,
};
export default AnchorDefault;
The current workaround is to manually write className prop and set it.
export const NavIconLink = ({
label,
icon,
className,
...props
}) => (
<AnchorDefault
styleName="a-navicon-link"
className={className} // <--- here
activeClassName={styles['a-navicon-link--active']}
{...props}
>
<span className="u-visible-sml">
{label}
</span>
<span className="u-block-md">
<Icon
className="a-svg-medium"
icon={icon}
/>
</span>
</AnchorDefault>
);
var NavIconLink = function NavIconLink(_ref) {
var label = _ref.label,
icon = _ref.icon,
className = _ref.className,
props = _objectWithoutProperties(_ref, ["label", "icon", "className"]);
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_elements__WEBPACK_IMPORTED_MODULE_2__[/* AnchorDefault */ "b"], _extends({
className: (className ? className + " " : "") + "a-navicon-link___36tEr" + (" " + (props ? props.className || "" : "")),
activeClassName: _NavIconLink_scss__WEBPACK_IMPORTED_MODULE_3___default.a['a-navicon-link--active']
}, props), _jsx("span", {
className: "u-visible-sml"
}, void 0, label), _jsx("span", {
className: "u-block-md"
}, void 0, _jsx(_elements__WEBPACK_IMPORTED_MODULE_2__[/* Icon */ "s"], {
className: "a-svg-medium",
icon: icon
})));
};
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Inspecciona los componentes NavIconLink y AnchorDefault mostrados en el issue, centrándote en cómo se compila styleName y en cómo la expansión de props gestiona className. Reproduce el JSX y la salida compilada proporcionados; después, verifica que un className entrante se conserve junto con el className compilado, en lugar de sobrescribirlo.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, react
- Área
- frontend
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 35/100