javascript - 为什么 localStorage 不保存该组件中的最后一个符号?

标签 javascript reactjs local-storage

在下面的代码中,当我更改输入文本时,localStorage 不会保存最后一个符号。就像我写 qwerty 一样,刷新它只给出 qwert。

let NameAndCity = React.createClass ({
getInitialState: function() {
return {
  name: this.props.name,
  city: this.props.city
};
},

componentWillMount: function() {
let username = localStorage.getItem('username')
let city = localStorage.getItem('city')
if(username && city){
  this.setState({
    name: username,
    city: city
  })
} else {localStorage.setItem('username', this.state.name)
localStorage.setItem('city', this.state.city)}
},

changeName(e){
this.setState({name: e.target.value})
localStorage.setItem('username', this.state.name)
},

changeCity(e){
this.setState({city: e.target.value})
localStorage.setItem('city', this.state.city)
},

render(){return (
<div className='name-and-city'>
  <input value={this.state.name} onChange={(e)=> this.changeName(e)}/>
  <input value={this.state.city} onChange={(e)=> this.changeCity(e)}/>
</div>
)}
})

最佳答案

这是一个已知问题。您正在使用 onChange 事件更新 state。但是您正在使用 this.state.name 而不设置状态。由于 setState异步,请尝试在回调中使用state值,如下所示。

changeName(e){
   var _this = this;
   this.setState({name: e.target.value}, function(){
       localStorage.setItem('username', _this.state.name);
   });
},

只需使用event.target.value存储在localStoarge

changeCity(e){
    this.setState({city: e.target.value}); //here state.name != e.target.value
    localStorage.setItem('city', e.target.value);
},

关于javascript - 为什么 localStorage 不保存该组件中的最后一个符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706250/

相关文章:

javascript - 模块构建错误 : pngquant ENOENT - webpack build succeeds on local OS X, 在 AWS Ubuntu 16.04 服务器上失败

javascript - 如何增加 localStorage 的值

javascript - 每 x 秒迭代一次状态中的对象

html - 如何在 Ember.js 中使用 HTML5 本地存储?

javascript - 在 WebView 中访问本地存储

javascript - 使用 Javascript 和 CSS 从左到右对齐

javascript - Facebook 登录仅在 Firefox 上不起作用

javascript - 拖动 .drag 时以绿色 .drop div 闪烁

javascript - React child 问题( typescript )

javascript - 如何使用reactjs样式在CSS中设置完整的背景图像?