Javascript 切换componentDidMount创建的反应中的崩溃
我正在调用一个API并将结果映射到我的状态,我也创建了一个可折叠的div,但是切换不起作用。我正在为div使用react引导,它正在更新状态fine,介于true和false之间,但它不会影响崩溃Javascript 切换componentDidMount创建的反应中的崩溃,javascript,reactjs,Javascript,Reactjs,我正在调用一个API并将结果映射到我的状态,我也创建了一个可折叠的div,但是切换不起作用。我正在为div使用react引导,它正在更新状态fine,介于true和false之间,但它不会影响崩溃 async componentDidMount() { const response = await fetch('/api/getall'); await response.json().then(data => { let results = data.data.map(item
async componentDidMount() {
const response = await fetch('/api/getall');
await response.json().then(data => {
let results = data.data.map(item => {
return(
<div>
<Button onClick={this.toggleOpen.bind(this)}>+</Button>
<Panel expanded={this.state.open}>
<Panel.Collapse>
<Panel.Body>
{item.text}
</Panel.Body>
</Panel.Collapse>
</Panel>
<hr/>
</div>
)
})
this.setState({results: results});
})
}
toggleOpen() {
this.setState({ open: !this.state.open })
console.log(this.state.open)
}
但是如果我执行
{this.state.results.data.map(item=>{
results显示为空数组,则不应将组件保存到状态。正如您所发现的,这样做会导致忽略对状态和道具的更改,而不会进行渲染。只需将数据保存到状态,然后在渲染方法中创建组件即可
async componentDidMount() {
const response = await fetch('/api/getall');
const data = await response.json();
this.setState({ results: data });
}
render() {
const { results } = this.state;
return (
<div>
{results.map(item => {
return(
<div>
<Button onClick={this.toggleOpen.bind(this)}>+</Button>
<Panel expanded={this.state.open}>
<Panel.Collapse>
<Panel.Body>
{item.text}
</Panel.Body>
</Panel.Collapse>
</Panel>
<hr/>
</div>
)
})}
</div>
}
异步组件didmount(){
const response=wait fetch('/api/getall');
const data=wait response.json();
this.setState({results:data});
}
render(){
const{results}=this.state;
返回(
{results.map(项=>{
返回(
+
{item.text}
) })} }
您不应该将组件保存到状态。正如您所发现的,这样做会导致忽略对状态和道具的更改,而不会进行渲染。只需将数据保存到状态,然后在渲染方法中创建组件即可
async componentDidMount() {
const response = await fetch('/api/getall');
const data = await response.json();
this.setState({ results: data });
}
render() {
const { results } = this.state;
return (
<div>
{results.map(item => {
return(
<div>
<Button onClick={this.toggleOpen.bind(this)}>+</Button>
<Panel expanded={this.state.open}>
<Panel.Collapse>
<Panel.Body>
{item.text}
</Panel.Body>
</Panel.Collapse>
</Panel>
<hr/>
</div>
)
})}
</div>
}
异步组件didmount(){
const response=wait fetch('/api/getall');
const data=wait response.json();
this.setState({results:data});
}
render(){
const{results}=this.state;
返回(
{results.map(项=>{
返回(
+
{item.text}
) })} }
当我这样尝试时,似乎有映射问题,我得到的是
结果。映射不是一个函数
,而是执行控制台.log(结果)
显示它有数据。Mythis.state.results
是一个数组如果results.map不是函数,那么this.state.results显然不是数组。我看到您在原始示例中有一个data.data
的实例;当我使用控制台时,是否需要执行results.data.map
而不是results.map
.log(results)
它显示{data:Array(2)}
但我尝试通过{results.data.map(item=>{
它给出的无法读取未定义的的属性“map”,然后将结果
显示为空此.state={results:{data:[]}
在Constructor中,我假设它与初始渲染有关,因为我只有一个console.log,它运行了3次,当我第一次尝试这种方法时,它显示一个空的arraySeems存在映射问题,我得到的是results.map不是一个函数
,而是执行console.log(results)
显示它有数据。Mythis.state.results
是一个数组如果results.map不是函数,那么this.state.results显然不是数组。我看到您在原始示例中有一个data.data
的实例;当我使用控制台时,是否需要执行results.data.map
而不是results.map
.log(results)
它显示{data:Array(2)}
但我尝试通过{results.data.map(item=>{
它给出的无法读取未定义的的属性“map”,然后将结果
显示为空此.state={results:{data:[]}
在Constructor中,我假设它与初始渲染有关,因为我只有一个console.log,它运行了3次,第一次它显示一个空的数组(一个?你没有使用任何标识符;)其中一个?你没有使用任何标识符;)
async componentDidMount() {
const response = await fetch('/api/getall');
const data = await response.json();
this.setState({ results: data });
}
render() {
const { results } = this.state;
return (
<div>
{results.map(item => {
return(
<div>
<Button onClick={this.toggleOpen.bind(this)}>+</Button>
<Panel expanded={this.state.open}>
<Panel.Collapse>
<Panel.Body>
{item.text}
</Panel.Body>
</Panel.Collapse>
</Panel>
<hr/>
</div>
)
})}
</div>
}