Сокращение формы со стилизованным компонентом

#javascript #reactjs #typescript #redux-form #styled-components

#JavaScript #reactjs #typescript #упрощенная форма #styled-компоненты

Вопрос:

Я пытаюсь создать повторно используемый компонент, в котором у меня есть <Field /> возвращенная форма сокращения, и в этом компоненте я изменяю его с помощью styled-component.

проблема, с которой я сталкиваюсь, заключается в том, что ни один из стилей не отражает

это мой simple-field-input.styles.ts

 import React from 'react';
import { Field } from 'redux-form';
import styled from 'styled-components';
import { SimpleFieldProps } from './simple-field-input.type';

const ReduxFormField: React.FC<SimpleFieldProps> = ({ componentType }) => {
    return <Field component={componentType} name="email" />;
};
export const Container = styled(ReduxFormField)`
    outline: none;
    border: none;
    background-color: orangered;
    color: yellow;
`;


  

и вот мой simple-field-input.component.tsx

 import React from 'react';
import * as Style from '../simple-field-input/simple-field-input.styles';
import { SimpleFieldProps } from './simple-field-input.type';

const FieldInput: React.FC<SimpleFieldProps> = ({ componentType }) => {
    return <Style.Container componentType={componentType}></Style.Container>;
};

export default FieldInput;


  

он просто отображает входные данные, но не реализует стили…

я буду признателен за любую помощь. Спасибо

Ответ №1:

При использовании styled компонента on on, который не является элементом DOM, он добавляет className к компоненту prop. Компоненту необходимо получить к нему доступ className и передать его через элемент DOM.

На самом деле вы передаете его здесь дважды, поскольку className он должен заканчиваться на the componentType , а не на Field самом себе.

 const ReduxFormField: React.FC<SimpleFieldProps amp; {className?: string}> = (
{ componentType, className }
) => {
    return <Field component={componentType} props={{className}} name="email" />;
};
  

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

1. реквизит className не решил проблему. можете ли вы помочь разобраться в каком-либо другом решении