2017-09-22 85 views
0

我在那里他们可以编辑自己的信息(电话号码,电子邮件等)类型错误:无法读取属性“名”空

我无法访问输入的namesetState回调内部用户对象的并继续得到TypeError: Cannot read property 'name' of null

但是,当我登录event.target.name它显示在那里。

当我改变它的工作原理一个简单的状态:

假设状态值是相同的目标名称。

this.setState({ [event.target.name]: value }); 

我下面this后更新用户对象。

对不起,如果这是重复的,我找不到我在找什么。

handleUserChange(event) { 
    console.log(event.target.name); 
    const value = event.target.value 
    this.setState(prevState => ({ 
     user: {...prevState.user, [event.target.name]: value } 
    })) 

    } 

编辑:我正确地结合它在类的构造函数,像这样:

contructor(props) { 
    super(props); 
    ... 
    this.handleUserChange = this.handleUserChange.bind(this) 
} 
+0

你会得到一个console.log的值? – HolyMoly

+0

您可以向我们展示_render_方法中将_handleUserChange_绑定到组件的代码吗? –

回答

3

REACT为回收此事件。所以异步调用setState不知道event.target.name的值,因为事件已经消失。您需要制作与event.target.value相同的值。

handleUserChange(event) { 
    console.log(event.target.name); 
    const name = event.target.name; 
    const value = event.target.value; 
    this.setState(prevState => ({ 
     user: {...prevState.user, [name]: value } 
    })) 

    } 

从文档:link

其他溶液:

handleUserChange(event) { 
    event.persist(); 
    const value = event.target.value; 
    this.setState(prevState => ({ 
     user: {...prevState.user, [event.target.name]: value } 
    })) 

    } 

仍然存在的情况下的值。

+0

这个伎俩!我不知道React回收事件。这是否包含在文档中? – Simon

+0

我在回答中发布了一个包含相关文档的链接。 –

相关问题