Javascript ReactJS-After.setState调用成功其他属性未定义
我设置了一个有输入框和标题的应用程序。标题输入更改Javascript ReactJS-After.setState调用成功其他属性未定义,javascript,reactjs,Javascript,Reactjs,我设置了一个有输入框和标题的应用程序。标题输入更改onChange,更新显示的标题。状态是一个数组为{title:[{title:'Welcome',feature:'test'}]的对象,我成功地为title设置了状态,但该功能随后变得未知。请参阅代码: APP.JS import React from "react"; import Header from "./Header"; export default class Layout extends React.Component {
onChange
,更新显示的标题。状态是一个数组为{title:[{title:'Welcome',feature:'test'}]
的对象,我成功地为title设置了状态,但该功能随后变得未知。请参阅代码:
APP.JS
import React from "react";
import Header from "./Header";
export default class Layout extends React.Component {
constructor() {
super();
this.state = {
title: [{
title: 'Welcome',
feature: 'test'
}]
};
}
changeTitle(titleChange) {
this.setState({title: [{title: titleChange }]});
}
render() {
return (
<div>
<Header changeTitle={this.changeTitle.bind(this)} title={this.state.title[0].title} feature={this.state.title[0].feature} />
</div>
);
}
}
从“React”导入React;
从“/Header”导入标题;
导出默认类布局扩展React.Component{
构造函数(){
超级();
此.state={
标题:[{
标题:"欢迎",,
功能:“测试”
}]
};
}
更改标题(标题更改){
this.setState({title:[{title:titleChange}]});
}
render(){
返回(
);
}
}
HEADER.JS
import React from "react";
import Title from "./Header/Title";
export default class Header extends React.Component {
handleChange(e) {
const title = e.target.value;
console.log(e, title);
this.props.changeTitle(title);
}
render() {
console.log(this.props.title) //This test Works
console.log(this.props.feature) //This test Works
return (
<div>
<Title title={this.props.title} />
<h4> Feature Here: {this.props.feature} </h4> //This disappears after I change input
Title Here: <input value={this.props.title} onChange={this.handleChange.bind(this)} />
</div>
);
}
}
从“React”导入React;
从“/Header/Title”导入标题;
导出默认类标头扩展React.Component{
手变(e){
const title=e.target.value;
控制台日志(e,标题);
此.props.changeTitle(标题);
}
render(){
console.log(this.props.title)//此测试有效
console.log(this.props.feature)//此测试有效
返回(
此处的功能:{this.props.Feature}//在我更改输入后,此功能消失
标题如下:
);
}
}
TITLE.JS
import React from "react";
export default class Title extends React.Component {
render() {
return (
<h1>{this.props.title}</h1>
);
}}
从“React”导入React;
导出默认类标题扩展React.Component{
render(){
返回(
{this.props.title}
);
}}
所以app.js是main,header.js是parent,title.js是child(如果我理解正确的话)
我更改后,标题
,因为新标题
,但功能
变为未定义
。知道怎么了吗?
我可能需要使用
组件willupdate
,但我不完全确定如何使用。当您运行设置状态时,您只指定了标题,而不是其他属性,因此它们被设置为未定义
使用“排列”操作可以对此有所帮助(如果您可以访问它)
如果没有,请确保包括在状态上设置的对象中的所有其他值。当运行设置状态时,您只指定了标题,而不是其他属性,因此它们被设置为未定义 使用“排列”操作可以对此有所帮助(如果您可以访问它)
如果没有,请确保在状态上设置的对象中包含所有其他值。这是因为当您
设置状态
时,您将标题
数组全部替换为内部标题
属性,而不是功能
。除非您有这样一个复杂状态的特定原因,否则我认为您可以只使用一个对象可以减少问题:
this.state = { title: 'Welcome', feature: 'test' };
然后设置状态:
changeTitle(titleChange) {
this.setState({ title: titleChange });
}
并构建您的标题:
<Header
changeTitle={this.changeTitle.bind(this)}
title={this.state.title}
feature={this.state.feature}
/>
如果没有Object.assign
,可能有一种更简洁的编写方法,但是我无法正确地测试它
编辑
这应该可以做到:
this.setState({ ...this.state.title[0], title: 'a' });
这是因为当您
设置state
时,您将标题
数组整体替换为内部标题
属性,而不是功能
this.state = { title: 'Welcome', feature: 'test' };
然后设置状态:
changeTitle(titleChange) {
this.setState({ title: titleChange });
}
并构建您的标题:
<Header
changeTitle={this.changeTitle.bind(this)}
title={this.state.title}
feature={this.state.feature}
/>
如果没有Object.assign
,可能有一种更简洁的编写方法,但是我无法正确地测试它
编辑
这应该可以做到:
this.setState({ ...this.state.title[0], title: 'a' });
嘿,k2Snowman69,我很感激,我也尝试过指定功能,但它不起作用。我只是尝试了你的方法,没有错误,但它没有解决问题(功能仍然没有定义):/还有其他想法吗?谢谢抱歉,离开我的电脑进入睡眠状态…看起来另一个答案让你走了很远!祝你好运!你能在这里看看吗?嘿,K2 Snowman69,我很感激,我也尝试了指定功能,但它不起作用。我只是尝试了你的方法,没有错误,但没有解决问题(功能尚未定义):/还有其他想法吗?谢谢,对不起,离开我的电脑去睡觉了……看起来另一个答案让你走了很远!祝你好运!你能在这里放松一下吗?嘿,安迪,谢谢,我确实有理由把它复杂化(这是我正在开发的实际产品所需要的).I还使用了
this.setState({title:[{title:title1},{feature:'test-2'}]})
您可以看到的功能已指定,但仍然没有定义:/@KevinDanikowski,对我的答案进行了修改,应该会让您走上正确的道路。非常感谢您的帮助Andy!因此,有效的代码是Jayce444的代码,出于某种原因,它声明“状态未定义”当我输入你的时,我相信你已经引导我走上了更好的道路,但是Jayce的现在会起作用,非常感谢你,我真的很感激!@KevinDanikowsk,我已经在我的回答中纠正了这一点。我没有在JSFIDLE中使用this.state
,并错误地复制了它。我添加了这个。
以查看它是否修复了它,并且它是h但不管怎样,我相信你让我走上了正确的道路,谢谢你嘿,安迪,谢谢你,我确实有理由把它复杂化(这就是我正在开发的实际东西所需要的)。我还使用了this.setState({title:[{title:title1},{feature:'test-2'})
您可以看到的功能已指定,但仍然没有定义:/@KevinDanikowski,对我的答案进行了修改,应该会让您走上正确的道路。非常感谢您的帮助Andy!因此,有效的代码是Jayce444的代码,出于某种原因,它声明“状态未定义”当我加入你的时候,我相信你已经引导我走上了更好的道路,但是