为什么不能在函数中访问更新的prop值?

时间:2019-08-26 19:29:35

标签: reactjs react-redux

所以我有一个功能组件,可以从redux获取数据。我的问题是,尽管数据在Redux存储中正确更改,但我无法访问某个道具的当前值,所以我认为Redux并不是问题。

我重写了下面的组件的简单版本。奇怪的是,即使在我的组件jsx中返回值.toString()也会返回正确的值,所以我希望这只是一个范围问题,或者是我没有得到我的代码而没有得到正确的值。 / p>

const Player = ({ isPlaying }) => {

  function setProgress() {
    console.log(isPlaying) // returns false here continuously!
  }

  function playSong() {
    setInterval(() => {
      setProgress();
    }, 500);
  }

  useEffect(() => {
    console.log(isPlaying) // returns true here!
  }, [isPlaying])
}


const mapStateToProps = ({ isPlaying }) => {
  console.log(isPlaying); // also returns true here!
  return { isPlaying };
};

export default connect(mapStateToProps, null)(Player);


这是CodeSandbox再现我遇到的问题的链接。

https://codesandbox.io/s/playererrordemo-r6bt2

1 个答案:

答案 0 :(得分:1)

setIntervalisPlaying上创建了一个闭包,这就是为什么它总是相同的值。

该间隔保留对其进行调用的isPlaying值的引用。要进行更改,您可能需要clearInterval并在isPlaying更改时重新开始。