当前位置: 首页 > 面试题库 >

反应this.state是不确定的?

牟嘉
2023-03-14
问题内容

我正在遵循Pluralsight的初学者教程,在表单上将值提交给addUser组件方法,我需要将userName推送到,this.state.users但出现错误

 App.jsx:14 Uncaught TypeError: Cannot read property 'users' of undefined

零件

import React from 'react'
import User from 'user'
import Form from 'form'

class Component extends React.Component {
    constructor() {
        super()
        this.state = {
            users: null
        }
    }
    // This is triggered on form submit in different component
    addUser(userName) { 
        console.log(userName) // correctly gives String
        console.log(this.state) // this is undefined
        console.log(this.state.users) // this is the error
        // and so this code doesn't work
        /*this.setState({
            users: this.state.users.concat(userName)
        })*/
    }
    render() {
        return (
            <div>
            <Form addUser={this.addUser}/>
            </div>
            )
    }
}

export default Component

问题答案:

当您调用时{this.addUser},它被调用,这this是您的类(组件)的一个实例,因此它不会给您任何错误,因为addUser方法确实存在于您的类中scope,但是当您处于addUser方法之下时,您将this用来更新state其中存在的方法。类(组件)的范围,但是当前您在addUser方法的范围内,因此它会给您带来错误,因为在addUserScope
下您没有像状态,用户等之类的东西。因此,要解决此问题,您需要this在调用时绑定addUser方法。这样您的方法就始终知道的实例this

因此,代码中的最终更改将如下所示:-

<Form addUser={this.addUser.bind(this)}/>

要么

您可以绑定this到构造函数中,因为它是您初始化事情的地方,因为在组件渲染到时首先调用构造函数方法DOM

所以你可以这样:

  constructor(props) {
    super(props);
    this.state = {
        users: null
    }
    this.addUser=this.addUser.bind(this);
}

现在,您可以像以前一样以正常方式调用它:-

<Form addUser={this.addUser}/>

我希望这能奏效,并向您明确表示。



 类似资料:
  • 我在react窗口列表元素中使用React/MUI Popover,并且无法正确定位Popover-它总是在窗口的左上角结束(组件无法在锚元素[in the docs])。 所以为了暂时解决这个问题,我决定使用参数来设置一个绝对位置——在我的例子中,就在窗口的中间。那也不行。 我已经查看了Chrome开发工具中的值,一切似乎都正常(即,我使用该工具时确实得到了一个锚定;我得到了有效的位置左/顶值;

  • 我试图在React中创建一个状态对象。我要求我们的状态实际上是一个由setState更新的字段 代码应为: 我应该如何将相同的对象设置为嵌套对象?

  • 我正在构建一个使用react-router的web应用程序。当我点击url localhost:8080/user时,它工作得很好。当我点击localhost:8080/user/login时,它不起作用,控制台显示意外标记>这是什么意思?我不明白这个问题。 在这行代码中还有一件事,当我换到其他类时,它也不起作用。 Routes.js webpack.config.js

  • 问题内容: 为什么我在这里未定义状态?我尝试了各种解决方案,但没有一个对我有用。有人可以指出这里做错了什么吗 编辑: 组件的完整代码 当从服务器动态加载侧边栏内容时,也有人可能会建议一个更好的选择 问题答案: 通过使用这种方式,您会失去上下文,而不是您所期望的那样。 在这种情况下,请将箭头功能用作: 或者, 这就是我的建议 ,请移至方法之外: 也可以将其绑定到构造函数中:

  • 问题内容: React 在promise中没有定义。这是我的代码: 这是错误代码: 问题答案: 可能没有约束力。 如果您可以使用ES6语法,请尝试用箭头函数替换。它会自动绑定: 或手动绑定:

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火