javascript - setState 映射函数中对象的一种状态

标签 javascript reactjs react-native components react-component

我已经处理这个问题两天了。在网上找不到解决方案,目前我认为我做错了什么。

所以这个应用程序的重点是单击按钮并放下一个苹果。单击该按钮会更改组件中树的状态和类名,导致其晃动。 Sass 动画会完成剩下的工作。但我无法更改一个苹果的类名。因此,无法为一个苹果设置动画。我认为它只是改变了所有这些,而且它们有点相互重叠。这不是我想要的。

不知道我处理过程是否错误,但这是 app.js 的代码:

class App extends Component {

  constructor(props){
    super(props);
    this.state = {
      apples: [],
      treeState: ''
    }
  }

  componentWillMount(){
    this.setState(
      {
        apples: [
      {
        id: '1',
        status: 'present'
      },
      {
        id: '2',
        status: 'present'
      },
      {
        id: '3',
        status: 'present'
      }
    ],
  treeState: 'stagnant'});
  }

  render() {
    return (
      <div className="App">        
        <div className="App-header">
        <img onClick={this.shakeTree.bind(this)} className="grab" alt="grab"/>
          <Apples apples={this.state.apples}/>
          <Tree treeState ={this.state.treeState}/>              
        </div>
      </div>
    );
  }

  shakeTree() {
    var css = (this.state.treeState === "stagnant") ? "shaking" : "stagnant";
    this.setState({"treeState":css}); 
    this.dropApples();
}

  dropApples(){
      let apple;
      var random = 2;
      if(this.state.apples){
        apple = this.state.apples.map(applemon => {   
          if(applemon.id==random){
            this.setState(
              {
                apples: [
              {
                id: random, 
                status: 'falling'
              }
            ]});
          }              
        });  
    }
  }  
}

export default App;

我想要的是将其中一个苹果的状态更改为“下落”,而不影响其他苹果。例如,获取 id 为 2 的苹果并将其状态更改为“下落”。

您能否详细介绍一下我的操作方法,或者为我提供一些有关其操作方法的确切资源。

最佳答案

您没有正确更新状态。您应该将整个更新的对象返回给 setState

dropApples(){
      let apple;
      var random = 2;
      if(this.state.apples){
        this.setState(prevState => ({
            apples: prevState.apples.map(apple => {
                if (apple.id == random) return {...apple, status: 'falling'}
                return apple
            })
        })) 
    }
} 

关于javascript - setState 映射函数中对象的一种状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52853029/

相关文章:

javascript - 使用 jquery 从 .cshtml 页面调用 Controller 操作

react-native - 如何在 react-native 中显示搜索类型的 Android 键盘

react-native - 播放音频文件,源 => {uri : 'remote-file-path' } not working - React Native (expo)

javascript - react native : Accessing JSON data

reactjs - Material-ui v4.0.1 警告 "Expected an element that can hold a ref"

javascript - Web 应用程序发送表单两次

javascript - 包含 ngMock 时 Controller 不工作

javascript - 为什么我的 h1 标签是 html 中的链接

reactjs - 如何使用 webpack 注册 Service Worker?

javascript - 如何在大型React项目中找到死代码?