首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >setState不会更新React时钟

setState不会更新React时钟
EN

Stack Overflow用户
提问于 2020-02-03 23:15:00
回答 1查看 327关注 0票数 0

我目前正在用React构建一个简单的应用程序,而且我对它还比较陌生,所以我觉得我的解决方案很简单,只是我还没有看到它的经验。

基本上,这个应用程序允许用户输入世界上任何城市的名称,输出会更新输入下的React实时时钟组件。为此,我使用城市时区库来获取用户所需城市的数据,使用moment.js将城市时间解析为所需时区,当然,还使用React实时时钟向用户显示实际时间。

在我的loadTime函数中,我检索了timezone属性,并将其传递给moment().tz()方法进行解析。在我将state传入setState()并将更新后的状态打印到控制台之后,它确实显示了正确的状态。例如,用户键入Tokyo,返回键/值timezone: "Asia/Tokyo"

我的问题是,在将this.state.timezone传递给我的React实时时钟组件timezone属性并单击Get time按钮后,我的时钟实际上并没有更新状态,而是保持用户浏览器的当前时间。

我已经确定我的loadTime()函数按照它应该的方式工作,所以我相信我的时钟组件没有正确地连接到读取更新的timezone状态。另一种可能性,正如我的问题中所说的,是我错误地使用了setState()

这里有没有我忽略的地方,或者我在滥用setState()的问题上走对了路?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Moment from 'moment-timezone';
import cityTimezones from 'city-timezones';
import Clock from 'react-live-clock';
let moment = require('moment-timezone');

export default class Search extends Component {

  state = {
    userLocation: "",
    localTime: "",
    rows: [],

  };

  //Methods
  loadTime = (searchTerm) => {
    const city = cityTimezones.lookupViaCity(searchTerm);
    let state = this.state; 
    if (city.length > 0) { 
      const timezone = city[0].timezone;    
      let now = moment().tz(timezone).format('h:mm:ss a');           
      state.localTime = now;         
      state.timezone = timezone;   
    } else {
      state.userLocation = "";
      state.localTime = "";
    };
    this.setState(state);  
    console.log(state);      
  };

    handleChange = (e) => {
      let state = this.state;
      state[e.target.name] = e.target.value;
      this.setState(state);   
    }

    //Create
    handleClick = (e) => {
      e.preventDefault();
      this.loadTime(this.state.userLocation);
    };

    render () {
      let alert = (!this.state.localTime) ? "Please enter location": "";

      return (
        <div className="search-container-fluid gradient p-3">
          <div className="row">
            <div className="search-container">
                <input onChange={this.handleChange} name="userLocation" type="text" 
                 className="form-control" placeholder="Enter a location" />
                <button onClick={this.handleClick} name="search-btn" className="btn btn-search" 
                 type="button" >Get time.</button>
              <div className="output-container mt-5">
                <Clock ticking={true} format={'hh:mm:ss a'} timezone={this.state.timezone} />                             
                {/* {alert} */}
              </div>
            </div>
          </div>
        </div>
      )
    }
  };``` 
EN

回答 1

Stack Overflow用户

发布于 2020-02-04 02:51:20

在这里,由于react无法识别更改,您将直接操作状态,请尝试使用以下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //Methods


loadTime = (searchTerm) => {
    const city = cityTimezones.lookupViaCity(searchTerm);
    let state = {...this.state}; 
    if (city.length > 0) { 
      const timezone = city[0].timezone;    
      let now = moment().tz(timezone).format('h:mm:ss a');           
      state.localTime = now;         
      state.timezone = timezone;   
    } else {
      state.userLocation = "";
      state.localTime = "";
    };
    this.setState(state);  
    console.log(state);      
  };

handleChange = (e) => {
  let state = {...this.state};
  state[e.target.name] = e.target.value;
  this.setState(state);   
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60048458

复制
相关文章
React 中setState更新state何时同步何时异步?
setState的“异步”并不是说内部由异步代码实现,本身的执行过程和代码都是同步的。
Clearlove
2021/03/17
2.2K0
揭密React setState
学过react的人都知道,setState在react里是一个很重要的方法,使用它可以更新我们数据的状态,本篇文章从简单使用到深入到setState的内部,全方位为你揭开setState的神秘面纱~
IMWeb前端团队
2019/12/03
1K1
揭密React setState
揭密 React setState
本文由 IMWeb 团队成员 Daisy黄琼 首发于社区网站 imweb.io。点击阅读原文查看 IMWeb 社区更多精彩文章。 前言 学过react的人都知道,setState在react里是一个很重要的方法,使用它可以更新我们数据的状态,本篇文章从简单使用到深入到setState的内部,全方位为你揭开setState的神秘面纱~ setState的使用注意事项 setState(updater,callback)这个方法是用来告诉react组件数据有更新,有可能需要重新渲染。它是异步的,react通常会
用户1097444
2022/06/29
3400
揭密 React setState
React源码分析与实现(二):状态、属性更新 -> setState
setState的源码比较简单,而在执行更新的过程比较复杂。我们直接跟着源码一点一点屡清楚。
Nealyang
2019/09/29
1.2K0
React源码分析与实现(二):状态、属性更新 -> setState
【React】setState修改状态
React(三) 修改状态 【数据驱动视图思想】 通过setState修改状态 作用: 修改state 更新ui 语法:this.setState({要修改的部分数据}) 💡 注意:不能直接修改state中的数据,而是要设置新值去覆盖。 // 1. 导包 import React from 'react' import ReactDom from 'react-dom/client' // 类组件 有状态 如果有状态,状态需要切换,更新视图 用类组件 class App extends React.Co
且陶陶
2023/04/12
6720
【React】setState修改状态
React-组件-setState
为什么最终的一个值是1, 不是 3 呢是吧,我明明是进行增加了 3 次加 1 的操作,因为 setState 默认是一个异步的方法, 默认会收集一段时间内所有的更新, 然后再统一更新, 所以就导致了最终的一个值是 1, 不是 3,博主可以大致的提供一下它底层的实现代码这样可以更加的让你对 setState 有更深层次的理解,如下:
杨不易呀
2023/09/30
1900
react报错this.setState is not a function
当报错这个的时候就要看函数是否在行内绑定this,或者在constructor中绑定this。
蓓蕾心晴
2018/08/15
1.1K0
React 学习:setState 源码浅析
作者:王少飞 先看下官网的一个demo。 定时更新当前元素, [FgBAioAZXqXE4LTBOrMlhJ6UHk3p] 拿这个例子分析下setState的实现原理: 首
腾讯IVWEB团队
2017/05/10
1.1K0
深入理解 React setState
React 修改 state 方法有两种: 1、构造函数里修改 state ,只需要直接操作 this.state 即可, 如果在构造函数里执行了异步操作,就需要调用 setState 来触发重新渲染。 2、在其余的地方需要改变 state 的时候只能使用 setState,这样 React 才会触发 UI 更新,如果在其余地方直接修改 state 中的值,会报错:
Leophen
2021/07/08
1K0
深入理解react的setState
1.那么问题来了这些周期方法为什么不可以setState? 2.setState异步机制,怎么处理,setState(函数)?
yuezhongbao
2019/03/13
9460
深入理解react的setState
React 的 setState 同步还是异步
大家好,我是前端西瓜哥。今天来聊聊 React 的 setState 是同步还是异步的。
前端西瓜哥
2022/12/21
7110
React中setState方法异步问题
在项目中使用state存储本组件的状态 , 使用setState对组件进行状态更新 , setState更新数据会重新渲染页面
用户9914333
2022/07/21
1.3K0
[第10期] 了解 React setState 运行机制
使用React 的时候, 难免要用到setState , 有一些基础还是需要了解一下。
皮小蛋
2020/03/02
1.2K0
深入react源码中的setState
在深究 React 的 setState 原理的时候,我们先要考虑一个问题:setState 是异步的吗?
flyzz177
2022/12/16
1.6K0
从 setState 聊到 React 性能优化
https://segmentfault.com/a/1190000039776687
Nealyang
2021/05/07
1.3K0
React---新扩展setState和lazyLoad
(1). setState(stateChange, [callback])------对象式的setState
半指温柔乐
2021/05/10
5040
Flutter的setState更新原理和流程
调用 setState() 必须是没有调用过 dispose() 方法,不然出错,可通过mounted属性来判断调用此方法是否合法。
用户1974410
2022/09/20
8150
【React源码笔记】setState原理解析
点击上方蓝字,发现更多精彩 导语 大家都知道React是以数据为核心的,当状态发生改变时组件会进行更新并渲染。除了通过React Redux、React Hook进行状态管理外,还有像我这种小白通过setState进行状态修改。对于React的初学者来说,setState这个API是再亲切不过了,同时也很好奇setState的更新机制,因此写了一篇文章来进行巩固总结setState。 React把组件看成是一个State Machines状态机,首先定义数值的状态state,通过用户交互后状态发生改变,然
腾讯VTeam技术团队
2021/01/29
2.2K0
React源码解析之setState和forceUpdate
一、enqueueSetState() 非异步方法中,无论调用多少个setState,它们都会在最后一次setState后,放入更新队列,然后执行一次统一的更新,详情请参考: React.setState之state批处理的机制 和 为什么React.setState是异步的?
进击的小进进
2019/09/05
1.4K0
React源码解析之setState和forceUpdate
React篇(012)-setState 和 replaceState 的区别
答案: 1. setState 是修改其中的部分状态,相当于 Object. assign,只是覆盖,不会减少原来的状态; 2. replaceState 是完全替换原来的状态,相当于赋值,将原来的 state 替换为另一个对象,如果新状态属性减少,那么 state 中就没有这个状态了。
齐丶先丶森
2022/05/12
6030

相似问题

React setState不会立即更新

113

React setState不会立即更新数据

13

setState不会在react中更新状态

25

React挂钩- setState不会更新某些状态属性

218

setState不会更新

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文