React Typescript:在 React.FC 中设置状态以更改 React.Component 中的值

Posted

技术标签:

【中文标题】React Typescript:在 React.FC 中设置状态以更改 React.Component 中的值【英文标题】:React Typescript: SetState inside React.FC to change value in React.Component 【发布时间】:2022-01-23 21:46:57 【问题描述】:

我有一个React.Component 状态为modalVisible 来打开一个模态:

<Modal
   visible=this.state.modalVisible
>
   <FormStructure
      record=this.state.selectedRecord
      question=this.state.question
      dropdownItems=this.state.dropdownItems
   />
</Modal>

Modal 打开后React.FC &lt;FormStrucutre ... /&gt; 被渲染,问题是我不知道如何更改modalVisible 内的状态值React.FC

 const Submit = () => 
        fetch('api/Call/Save', 
            headers:  'Content-Type': 'application/json' ,
            method: 'POST',
            body: JSON.stringify(
                'No': form.getFieldValue('no')
            )
        )
            .then(() => this.setState(modalVisible: false); //TS2532  (TS) Object is possibly 'undefined'.
    ;

【问题讨论】:

这有帮助吗? this!.setState(modalVisible: false 【参考方案1】:

你必须将 closeModal 方法传递给React.FC &lt;FormStructure /&gt;

// class component

<Modal
   visible=this.state.modalVisible
>
   <FormStructure
      record=this.state.selectedRecord
      question=this.state.question
      dropdownItems=this.state.dropdownItems
      closeModal=() => this.setState(modalVisible: false)
   />
</Modal>

使用 FormStructure 中的道具

// FormStructure.tsx

const FormStructure = (props: any) => 
  const record, question, dropdownItems, closeModal = props;

  const onSubmit = () => 
     ....
     closeModal();
  


【讨论】:

【参考方案2】:

一个常见的模式是将回调作为 props 传入,子组件在事件发生时调用回调。在这种情况下,您可以公开 onSave 道具:

// parent
<Modal
   visible=this.state.modalVisible
>
   <FormStructure
      record=this.state.selectedRecord
      question=this.state.question
      dropdownItems=this.state.dropdownItems
      onSave=() => this.setState(modalVisible: false)
   />
</Modal>


// child
class FormStructure extends React.Component 
   const Submit = () => 
        fetch('api/Call/Save', 
           // ...
        )
            .then(() => this.props.onSave();
    ;


【讨论】:

以上是关于React Typescript:在 React.FC 中设置状态以更改 React.Component 中的值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typescript 在 React 中重定向

使用react搭建组件库:react+typescript

在 react-table 中显示布尔值和时间戳值:React Table+ React+Typescript

在 React/Typescript 中输入对象

使用 Typescript 创建 React 组件

Typescript、React、Electron:不能在模块外使用 import 语句