gpt4 book ai didi

javascript - react 中的功能没有按预期工作

转载 作者:行者123 更新时间:2023-11-30 19:56:41 25 4
gpt4 key购买 nike

我正在尝试编写一个处理按钮点击的函数。我希望事情发生:

  1. 该函数获取一个字符串并将名为“chosenGenre”的状态更改为给定的字符串。

  2. 当点击某个按钮时,它会调用该函数并返回一个字符串。

  3. 字符串/状态“chosenGenre”已保存,以便稍后在另一个组件中使用它。

这是我写的,但我认为我在单击按钮后传递字符串的方式不正确。

import React, { Component } from 'react';
import Genre from './Genre';
import './GenreSelectPage.css';
import Blues from '../Blues.png';
import Classical from '../Classical.png';
import Country from '../Country.png';


export default class GenreSelectPage extends Component{

state = {
chosenGenre: ""
}

handleClick = (genreName) => {
this.setState({chosenGenre: genreName});
}


render(){
return(
<div className = "GenreSelectPage">
<h3>Select your desired Kollab Room Genre</h3>
<Genre genrePicture= {Blues} genreClicked = {this.handleClick("blues")}/>
<Genre genrePicture= {Classical} genreClicked = {this.handleClick("Classical")}/>
<Genre genrePicture= {Country} genreClicked = {this.handleClick("Country")}/>
)
}
}

为了以正确的方式调用函数并保留结果,我应该更改什么?

最佳答案

问题是this.handleClick("blues")在render过程中执行,返回undefined,类似于genreClicked={undefined},副作用是安排 3 个异步 setStates...

您可以使用返回事件处理函数的工厂函数,并访问闭包变量:

makeHandleClick = (genreName) => (event) => {
this.setState({ chosenGenre: genreName });
// console.assert(this.state.chosenGenre); // FYI: not possible, setState is async
}

render() {
...<Genre genrePicture={Blues} genreClicked={this.makeHandleClick("blues")} />

关于javascript - react 中的功能没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com