相关疑难解决方法(0)

在setInterval中使用React状态挂钩时,状态不会更新

我正在尝试新的React Hooks并且有一个带有计数器的Clock组件,它应该每秒都会增加.但是,该值不会超过一个.

function Clock() {
  const [time, setTime] = React.useState(0);
  React.useEffect(() => {
    const timer = window.setInterval(() => {
      setTime(time + 1);
    }, 1000);
    return () => {
      window.clearInterval(timer);
    };
  }, []);

  return (
    <div>Seconds: {time}</div>
  );
}

ReactDOM.render(<Clock />, document.querySelector('#app'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.development.js"></script>

<div id="app"></div>
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hooks

55
推荐指数
6
解决办法
2万
查看次数

在 api 获取请求失败后重新调用 useEffect

我正在执行 useEffect() 以使用 JSON 数据更新状态。但是,获取请求有时会失败,因此如果发生这种情况,我想重新执行 useEffect 钩子:

...
import React, {useState, useEffect} from 'react';
import {getJsonData} from './getJsonData';

const myApp = () => {
    var ErrorFetchedChecker = false;
    const [isLoading,setIsLoading] = useState(true);
    const [data,setData] = useState(null);

    const updateState = jsonData => {
      setIsloading(false);
      setData(jsonData);
    };

    useEffect(() => {
      //console.log('EXECUTING');
      getJsonData().then(
        data => updateState(data),
        error => {
          Alert.alert('DATA FETCHING ERROR !', 'Refreshing ?...');
          ErrorFetchedChecker = !ErrorFetchedChecker;
          //console.log('LOG__FROM_CountriesTable: Executed');
        },
      );
    }, [ErrorFetchedChecker]);//Shouldn't the change on this variable
                              //be enough to re-execute …
Run Code Online (Sandbox Code Playgroud)

async-await reactjs react-native fetch-api

2
推荐指数
1
解决办法
1531
查看次数

每秒更新 useEffect 中的状态,持续 10 秒

通过不深入实际用法,我创建了一个简单的示例来解释我想要做什么。

我有一个状态对象{num:0},我想在 10 秒内每秒更新一次 num,据此,我创建了一个工作完美的类组件。

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      num: 0
    };
  }

  componentDidMount = () => {
    for (let i = 0; i < 10; i++) {
      setTimeout(() => this.setState({ num: this.state.num + 1 }), i * 1000);
    }
  };

  render() {
    return (
      <>
        <p>hello</p>
        <p>{this.state.num}</p>
      </>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我想在功能组件中复制相同的功能,但我做不到。我尝试如下图所示:

const App = () => {
  const [state, setState] = React.useState({ num: 0 });

  React.useEffect(() => {
    for …
Run Code Online (Sandbox Code Playgroud)

javascript settimeout reactjs react-hooks use-effect

1
推荐指数
1
解决办法
1万
查看次数