javascript - 如何使用传递给 React 函数的参数来设置状态

标签 javascript reactjs components state react-props

我正在尝试将数组(标题)从子组件传递到父组件,然后使用该数组设置父组件的状态。但是,在处理 increaseReads() 方法中的更改时,我无法更改 articlesRead 状态

您将看到两个 console.log() 语句;第一个成功记录了标题,但第二个记录了一个空数组——之前的状态

child :

export class Publication extends React.Component {
  constructor() {
    super();
    this.state = {
      items: []
    };
  }

  componentDidMount() {
    fetch(this.props.url)
    .then(response => {
      return response.json();
    }).then(({ items })=> {
      this.setState({ items });
    });
  }

  handleClick () => {
    this.props.openArticle();
  }


  render() {
    return (
      <div className='publication'>
        <h4>{this.props.name}</h4>
        <ul>
          {this.state.items.map(item => (
           <li><a href={item.link} target='_blank' onClick={this.handleClick}>{item.title}</a></li>
          ))}
        </ul>
      </div>
    );
  }
}

父级:

export class Latest extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      totalReads: 0,
      articlesRead: []
    };
  }

  handleChange = () => {
    this.props.increaseTotal();
  }

  increaseReads(titles) {
    this.setState({
      totalReads: this.state.totalReads + 1,
      articlesRead: titles
    })

    // Won't log correctly
    console.log(this.state.articlesRead);

    this.handleChange();
  }

  render() {
    return (
      <div className='container'>
        <Publication total={(titles) => {this.increaseReads(titles)}} name='Free Code Camp' api={'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fmedium.freecodecamp.org%2Ffeed%2F'}/>
        <Publication total={() => {this.increaseReads()}} name='Code Burst' api={'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fcodeburst.io%2Ffeed%2F'}/>
        <Publication total={() => {this.increaseReads()}} name='JavaScript Scene' api={'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fmedium.com%2Ffeed%2Fjavascript-scene%2F'}/>
        <Publication total={() => {this.increaseReads()}} name='Hacker Noon' api={'https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fhackernoon.com%2Ffeed'}/>
      </div>
    )
  }
}

我确定它很小,但我们将不胜感激任何帮助!

最佳答案

问题可能是您期望 this.setState 是同步的。查看documentation here .

看看这个CodeSandbox demo . this.setState 接受回调作为第二个参数。此回调在 this.setState 完成后调用。

注意如何在 console.log 输出中,我们可以看到 oldnew 状态值。

关于javascript - 如何使用传递给 React 函数的参数来设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48750989/

相关文章:

javascript - react : 'this.state' is undefined inside a component function

layout - Nuxt.js - 如何在布局中使用布局

Javascript图表显示标签

javascript - 获取数组中的第一项和最后一项 - JS

javascript - 使用 useParams 从 url 获取值

reactjs - Go Api 返回 Unauthorized

android - 扩展安卓应用

jquery - knockoutjs 我可以使用组件作为表格行吗

javascript - PHP 代码在 chrome 中返回空,在 firefox 中返回值,我该如何调查原因?

javascript - 如何使用jquery像excel一样显示负整数的括号