Я в самом начале создания сборщика иконок для sanity.io с пакетом реагирования npm. Я застрял при попытке отобразить объект и вернуть правильный код для реакции на работу, используя Object.values(ReactIcons).map...
, если я просто консоль записываю в журнал одно из значений объектов, например ReactIcons.Fa500Px
, я получаю следующую функцию
ƒ (props) {
return Object(__WEBPACK_IMPORTED_MODULE_0__lib__["a" /* GenIcon */])({"tag":"svg","attr":{"viewBox":"0 0 448 512"},"child":[{"tag":"path","attr":{"d":"M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-…
Теперь, если я возьму тот же код из console.log и вставлю его в скобки компонента jsx или React, например, <ReactIcons.Fa500Px />
, то значок будет просто отлично отображен
Однако, если я попытаюсь сделать это внутри метод map с чем-то вроде этого, я просто получаю кучу элементов в dom, выглядящих как <x></x>
. Однако console.log (x) возвращает серию функций того же формата, что и приведенная выше, которую я только что поместил в квадратные скобки, что привело к отображению иконки.
{Object.values(ReactIcons).map(x =>{
return (
<>
{console.log(x)}
<x/>
</>
);
})}
Мой финал Попытка заставить это работать - создать функцию Icon, передать в нее реквизит и отобразить его как компонент. Это не сработало, но вот эта попытка.
function Icon(props){
return(
<>
{props.value}
</>
)
}
{Object.values(ReactIcons).map(x =>{
return (
<>
{console.log(x)}
<Icon value={x}/>
</>
);
})}
Вот вся база кода, чтобы убедиться, что, возможно, я помещаю свою функцию Icon в неправильное место.
import React from 'react'
import PropTypes from 'prop-types'
import FormField from 'part:@sanity/components/formfields/default'
import PatchEvent, {set, unset} from 'part:@sanity/form-builder/patch-event'
import * as ReactIcons from 'react-icons/fa'
console.log(ReactIcons);
const createPatchFrom = value => PatchEvent.from(value === '' ? unset() : set(String(value)))
function Icon(props){
return(
<>
{props.value}
</>
)
}
class IconPickerCustom extends React.Component{
static propTypes = {
value: PropTypes.string,
onChange: PropTypes.func.isRequired
};
render = () =>{
const {type, value, onChange} = this.props
return (
<>
<FormField label={type.title} description={type.description}>
<input
type="text"
value={value === undefined ? '' : value}
onChange={event => onChange(createPatchFrom(event.target.value))}
ref={element => this._inputElement = element}
/>
</FormField>
{Object.values(ReactIcons).map(x =>{
return (
<>
{console.log(x)} // has same result as console log below, except it is all the icons
<Icon value={x}/> //neithr works
<x /> //neither works
</>
);
})}
{console.log(ReactIcons.Fa500Px)}
<ReactIcons.Fa500Px/>
</>
)
}
}
export default IconPickerCustom;