亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解決:從Cookie加載組件狀態時不會對其進行更新

解決:從Cookie加載組件狀態時不會對其進行更新

慕斯709654 2021-04-09 14:15:05
我有一個帶有按鈕的React應用程序,該按鈕具有一個切換按鈕,該切換按鈕允許顯示或隱藏頁面中的某些視圖,因此,如果用戶單擊該切換按鈕,它將看到一個視圖(切換為“打開”視圖)或另一個視圖(切換為“關閉”)看法)。我必須將此切換的值存儲在cookie中,以確保當用戶再次訪問該網站時,它會看到最后一次選擇的視圖(“打開”或“關閉”)。我試圖通過使用“ npx create-react-app”從頭開始創建新的react應用來以最簡單的方式解決此問題。我還包括了npm react-cookie庫。當用戶單擊切換按鈕,在cookie中設置了正確的值并顯示了正確的視圖時,這可以很好地工作。但是,如果我重新加載頁面,它將始終顯示不正確的視圖,而忽略了從cookie加載的值。我無法解釋為什么僅在頁面加載時才會發生這種情況。Index.js代碼:import React from 'react';import ReactDOM from 'react-dom';import './index.css';import App from './App';import * as serviceWorker from './serviceWorker';import { CookiesProvider } from 'react-cookie';ReactDOM.render(<CookiesProvider>                    <App />                </CookiesProvider>,                 document.getElementById('root'));serviceWorker.unregister();App.js代碼:import React, { Component } from 'react';import { instanceOf } from 'prop-types';import './App.css';import { withCookies, Cookies } from 'react-cookie';class App extends Component {  static propTypes = {    cookies: instanceOf(Cookies).isRequired  };  constructor(props) {    super(props);    const { cookies } = props;    var valueToSet = cookies.get('toggleMode');    console.log('Toggle Value from Cookie: ' + valueToSet);    this.state = {      toogle: cookies.get('toggleMode')    };  }  toggleTableModeButtons = () => {      return (         <div>          <button type="button" onClick={this.toggleMode}>Toggle Now!</button>        </div>      );  };  toggleMode = event => {    const { cookies } = this.props;    event.preventDefault();    var toogleValueToSet = !this.state.toogle;    this.setState(      { toogle: toogleValueToSet }    );    console.log('Setting Cookie with value: ' + toogleValueToSet);    cookies.set('toggleMode', toogleValueToSet, { path: '/' });  }  render() {    const { toogle } = this.state;    console.log('Toggle Value in RENDER: ' + toogle);export default withCookies(App);我需要知道在此示例中我做錯了什么。任何幫助都會很感激。
查看完整描述

1 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

您的Cookie會給您返回不是布爾值的字符串,您可以嘗試如下更改控制臺日志,該控制臺日志將打印“字符串”,當狀態被cookie值更新時。您的情況太過分了嗎?如果toogle中存在某些內容,則將始終返回true,這是從cookie設置toogle時的情況。


console.log('Toggle Value in RENDER: ' + typeof toogle);

如下使用JSON解析您的cookie值,它將起作用。


this.state = {

  toogle: JSON.parse(cookies.get('toggleMode')) || false

};


查看完整回答
反對 回復 2021-04-22
  • 1 回答
  • 0 關注
  • 264 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號