javascript - 在 React.js 中,我的状态不是在第一次单击时更新,而是在第二次单击时更新

标签 javascript reactjs react-props

我必须单击下拉菜单上的项目两次才能使状态更新页面上显示的内容。我包含了一个视频和一些代码片段。我该如何改变这一点?

enter image description here

父类组件(APP):

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      region: 'Africa', // region is owned by Parent component
      countries: [],
    }
  }

  updateRegion = (type) => {
    this.setState({
      region: type
    })
  }

API 获取

  componentDidMount(){
    const apiURL = `https://restcountries.eu/rest/v2/all`;
      const response = fetch(apiURL)
        .then(resp => resp.json())
        .then(data => {
          this.setState({
            countries: data
          });
        })
  }

渲染应用

  render() {
    return (
      <div className="App">
      <section>
        <div id="search">
          <div id="search_dropdown">
            <Menu regionUpdate = {this.updateRegion}/>
          </div>
        </div>

        <CountryList countries = {this.state.countries} region = {this.state.region}  />
      </section>
    </div>
      )
  }
}

export default App;

子无类组件(菜单):

export default function SimpleMenu(props) {
  const [type, updateType] = React.useState('Africa');

  const onRegionClick = (e) => {
    updateType(e.target.innerText);
    console.log(e.target.innerText);
    props.regionUpdate(type);
  }

返回菜单

  return (
    <div>
      <Button>
        Filter by Region
      </Button>
      <Menu>
        <MenuItem onClick = {onRegionClick}> Africa </MenuItem>
        <MenuItem onClick = {onRegionClick}> Americas </MenuItem>
        <MenuItem onClick = {onRegionClick}> Asia </MenuItem>
        <MenuItem onClick = {onRegionClick}> Europe </MenuItem>
        <MenuItem onClick = {onRegionClick}> Oceania </MenuItem>
      </Menu>
      
    </div>
  );
}

最佳答案

state 异步更新,您无法确定状态更新是否会在调用 props.regionUpdate 之前发生。直接传递目标值即可。

const onRegionClick = (e) => {
   updateType(e.target.innerText);
   // console.log(type);  ---> it would log the old, previous value
   props.regionUpdate(e.target.innerText);
}

关于javascript - 在 React.js 中,我的状态不是在第一次单击时更新,而是在第二次单击时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64617120/

相关文章:

javascript - 单击按钮时设置新对象位置?

javascript - 具有日期时间和多列的 Highstock

reactjs - 使用多个标点符号时出现意外 token

javascript - 如何获得分配给删除功能的正确 ID

reactjs - 与未转换为 localIdentName 的 Storybook 连接字符串 react

javascript - 从字符串解析和渲染 SVG

javascript - 带有自定义 header 的 CORS GET : is it possible to get rid of OPTIONS

javascript - 如何强制React组件删除后重新渲染

javascript - React 中的受控选择未设置 defaultValue

javascript - 如何对 Prop 更改进行 API 调用?