为了账号安全,请及时绑定邮箱和手机立即绑定

通过对象搜索后响应组件的更新状态

通过对象搜索后响应组件的更新状态

隔江千里 2022-05-26 14:15:06
我有一个从 reactIcons npm 包https://www.npmjs.com/package/react-icons输出的对象我正在使用 sanity studio从其中一个文件夹中导入所有内容import * as ReactIcons from 'react-icons/fa',我创建了一个文本输入搜索到的值并运行一个搜索函数,该函数对我从 reactIconsfa文件夹中获取的对象的值运行包含,并记录匹配的值。现在我想获取这些值并使用useState()Howerver 更新反应组件我收到以下错误Uncaught ReferenceError: setIcon is not defined,并且 SetIcon 是 useState 数组中的 setter 函数。到目前为止,这是我的代码import React, { useState } 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)))const Example = value => {  const [icon, setIcon] = useState();  return (   <div>{icon}</div>  );}const search = value => {  console.log(value);    Object.keys(ReactIcons).map(go => {    if (go.toLowerCase().includes(value) === true){      console.log(go);      setIcon(go);    }  })}class IconPickerCustom extends React.Component{    static propTypes = {        value: PropTypes.string,        onChange: PropTypes.func.isRequired    };
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

React 有两类组件,类组件和函数组件(以前称为无状态组件)。当您意识到需要在函数组件中使用状态并且不想将其转换为类组件时,会在函数组件中使用钩子。


useState() Hook 允许我们在函数组件中添加状态。


类组件


//initialize state

constructor(props) {

    super(props);

    this.state = {foo: bar};

}


//set state

this.setState({foo: baz});


//read state

this.state.foo;

函数组件

(带有 useState() Hook)


//initialize state

const [icon, setIcon] = useState("myInitialValue");


//set state

setIcon("myNewValue");


//read state

{icon}

话虽如此,你已经有了一个类组件,所以这里不需要使用钩子。


class IconPickerCustom extends React.Component{


constructor(props) {

    super(props);

    this.state = { icon: "nothing" };

}


static propTypes = {

    value: PropTypes.string,

    onChange: PropTypes.func.isRequired

};


const createPatchFrom = value => PatchEvent.from(value === '' ? unset() : set(String(value)));


const search = value => {

    Object.keys(ReactIcons).map(go => 

        ({ go.toLowerCase().includes(value) ? 

           this.setState({icon:go}) : null;}) 

}


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>

        <input

          type="text"

          onChange={event => search(event.target.value)}

        />

        {Object.values(ReactIcons).map(X =>{

          return (

            <>

          <X/>

          </>

          );

        })}

        {console.log(ReactIcons.Fa500Px)}

        <ReactIcons.Fa500Px/>

        <Example/>

      </>

    )

}

}


export default IconPickerCustom;

你会想要一些类似的东西。如果您有任何问题,请告诉我。


查看完整回答
反对 回复 2022-05-26
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号