以前はlocalStorageを使ったことはありませんでしたが、それは十分に簡単だったようです。悲しいかな、私はReactでそれを使っていくつかの奇妙な問題にぶち当たっています。ReactとlocalStorageでNaNを取得する
アイテムのクリック数をlocalStorageに保存しようとしているので、アプリをナビゲートするとデータが保存されます。
私は、コンソールでのlocalStorageを表示し、期待されるようなものによるクリックや刻みでsetItem
作品が、物事が最初に
- を起こっているカップルはクリック数がDOMから消えているをクリックします。
- 最初のクリック後、値は
NaN
- になります。別のページに移動し、ブラウザのナビゲーションを使用してそのページに戻ると、情報はなくなりました。私はこれが何かを持っていると推測しています。リアックフック私は正しく使用していませんが、間違っている可能性があります。
ここにコードがあります。
import React, { Component } from 'react';
import {IndexLink} from 'react-router';
/* eslint-disable */
import Item from '../styles/LinkItem.css';
class LinkItem extends Component {
constructor(props) {
super(props);
this.state = {
clicks: 0,
text: this.props.link,
newText: null
};
}
getClicksCount() {
const localStorageRef = localStorage.getItem('link-' + this.props.link);
if(localStorageRef) {
this.setState({
clicks: JSON.parse(localStorageRef) + 1
})
}
}
componentWillMount() {
this.getClicksCount()
}
editLink() {
const newText = prompt('Update your link');
this.setState({
newText: newText
}, function(){
this.props.data.updateLink(this.props.index, this.state.newText);
})
}
handleClick(e) {
e.preventDefault();
const clicks = this.state.clicks;
this.getClicksCount();
}
render() {
return (
<tr>
<td>
<IndexLink onClick={this.handleClick.bind(this)} to={{pathname: 'landing/' + this.props.link}}>{this.state.newText != null ? this.state.newText : this.props.link}</IndexLink>
</td>
<td>{this.state.clicks}</td>
<td><button className="btn btn-default" onClick={this.editLink.bind(this)}>Edit</button></td>
<td><button className="btn btn-danger" onClick={this.props.data.deleteLink.bind(null, this.props.index)}>Delete</button></td>
</tr>
);
}
}
export default LinkItem;
ありがとうございました。それは意味があります。それはまた良いですが、カウンターは増加しないナビゲーションを越えて持続しています。また、localStorageにデータが表示されません。私がsetを使用していない場合、どのようにしてデータがlocalStorageに入るのですか? – maxwellgover
もちろん、 'localStorage.setItem'を使ってそれを保存してください。つまり、戻り値を使用して別のメソッドに移動する必要はありません。私は今私の答えを編集し、私がコードで意味することを示すことを試みる。 –