当前位置: 首页 > 知识库问答 >
问题:

状态回调触发对象无效错误

阎智
2023-03-14

我试图使用回调将验证输入。

当我试图在文本框中输入时,我遇到了下面的错误。有人能帮我解释一下为什么我会犯这个错误,以及我如何纠正它吗。

不允许回调吗?我错过了什么?

未捕获错误:对象作为React子对象无效(找到:具有键{dispatchConfig、_TargetList、nativeEvent、type、target、currentTarget、eventPhase、bubbles、cancelable、timeStamp、defaultPrevented、isTrusted、isDefaultPrevented、isPropagationStopped、_dispatchListeners、_dispatchInstances}的对象)。如果要呈现子对象集合,请改用数组。在div中(由HelloWorldWithProperties5创建)在HelloWorldWithProperties5中(由Parent2创建)在Parent2中(由App创建)在div中(由App创建)在App at invariant中(react dom.development.js:55)

    import * as React from 'react';
interface IProps{
    userName?:string
}
const HelloWorldWithPropertiesES5= (props:IProps)=>{   
    return (
        <div>
            Hello {props.userName}
        </div> 
    )
    }

    export default HelloWorldWithPropertiesES5;
   import * as React from 'react'

interface IProps {
    userName : string;
    onChange : (event:any) => void;

  }

  export const NameEditComponent = (props : IProps) => 
  <>
  <h2>this shows event changes</h2>
    <label>Update name:</label>
    <input value={props.userName} 
           onChange={props.onChange}
    />

  </>

export default NameEditComponent;
 import * as React from 'react';
import HelloWorldWithPropertiesES5 from 'src/Lesson2-Properties/HelloES5';
import NameEditComponent from './MyChild';

interface IState {
  userName : string;
}

export class Parent2 extends React.Component<{},IState> {
  constructor(props:any) {
    super(props);

    this.state = {userName: 'defaultUserName'};
  }

  public setUsernameState = (newName:string) => {
          this.setState({userName:newName},()=>this.validateName());
    }



      public validateName () {
        if (this.state.userName.length === 0) {
         alert('error')

        }
      }

  public render() {
    return (
        <>
      <HelloWorldWithPropertiesES5 userName={this.state.userName} />
      <NameEditComponent userName={this.state.userName} onChange={this.setUsernameState} />
    </>
    );
  }
}

export default Parent2;

共有2个答案

蒋嘉实
2023-03-14
  1. 在调用setState方法之前,请尝试验证您的用户名

包裹起来...我认为你的包装应该看起来更像:

public setUsernameState = (event) => {
  const {newName} = event.target;
  if (!this.validateName(newName)) {
    customMethodToSetErrors();
  }
  this.setState({userName: newName});
}

编辑:

对不起,,我不知道setState的回调是做什么的...所以你的回调很好,你的问题应该只是处理程序的参数类型和你获得新值的方式:)所以试着从事件对象参数中获得一个新值。

桂坚
2023-03-14


我不是一个打字专家,所以也许我的签名类型有点不对劲,但应该是这样的:

public setUsernameState = (event: object) => {
  this.setState({ userName: event.target.value }, () => this.validateName());
}
 类似资料:
  • 问题内容: 我正在运行代码,但是得到的是“无效状态,ResultSet对象已关闭”。错误。是什么导致错误? 问题答案: 您无法对当前使用进行迭代的查询执行另一个SQL查询。这样做会关闭先前打开的游标(您的查询代表): 引用Statement的API文档: 默认情况下,每个Statement对象只能同时打开一个ResultSet对象。因此,如果一个ResultSet对象的读取与另一个的读取交错,则每

  • 问题内容: 我在使用gridview单击按钮时遇到以下错误 当我按下gridview内的按钮时会发生这种情况,奇怪的是,我有另一个gridview,在运行不同代码但没有错误的列中也有自定义按钮。以下是该页面的代码及其背后的代码。 和实际页面: 现在我想知道,这是否有什么关系的事实,是内部的?因为我的其他工作正常的表不是… 注意:由于字符限制,不得不从页面上剪切一些代码 问题答案: 1)GridVi

  • 问题内容: 我有以下ajax请求: 由于某种原因,错误的回调被称为事件,尽管http状态代码为200,即。该请求是可以的。为什么是这样? 问题答案: 问题可能是从网址返回的json数据格式错误。当服务器实际返回内容时,http状态代码为200。但这并不意味着数据是正确的json。检查返回的字符串化json数据格式正确。 我要回答自己的邀请,因为我是很难学到的。我没有在json数据中转义“-”引号字

  • 问题内容: 我正在尝试使用用户代理将json设置为一种状态,但出现错误: 未捕获的不变违规:对象作为React子对象无效(找到:具有键{…}的对象)。如果您打算渲染孩子的集合,请使用数组代替,或者使用React附加组件中的createFragment(object)包装对象。 设置状态的方法: 服务 杰森 问题答案: 您无法执行此操作:由于您的错误提示您尝试执行的操作无效。您正在尝试将整个数组呈现

  • 问题内容: 我收到此错误: 这是什么意思? 这是我的代码: 我究竟做错了什么? 按提交按钮后出现此错误。 问题答案: 在您的aspx文件中,您应该这样放置第一行: 如果您已经有类似的东西, 那么只需添加其余的=> 我建议不要这样做。

  • 使用Alamofire 4/Swift 3,您如何区分由于以下原因而失败的请求: 网络连接(主机关闭,无法连接到主机)vs 代码: 我们希望以不同的方式处理每个案件。在后一种情况下,我们要询问回答。(在前一种情况下,我们不知道,因为没有回应)。