react-router ไม่สามารถอ่านคุณสมบัติ 'push' ของไม่ได้กำหนดได้

ฉันใช้ react-router เพื่อนำทางไปยังหน้าใดหน้าหนึ่งหลังจากเข้าสู่ระบบผ่าน REST api ของฉัน

นี่คือตัวอย่างรหัสของฉัน ลองสิ่งนี้:

export default {
  loginUser: (jwt, rememberMe) => {
  var savedJwt = localStorage.getItem('jwt');

  AppDispatcher.dispatch({
    actionType: 'LOGIN_USER',
    jwt: jwt
  });

  if (savedJwt !== jwt) {
    browserHistory.push('/');
    localStorage.setItem('jwt', jwt);
  }
},

และสิ่งนี้อิงจากบทช่วยสอนเกี่ยวกับรีแอคเตอร์เราเตอร์

export default {
  loginUser: (jwt, rememberMe) => {
  var savedJwt = localStorage.getItem('jwt');

  contextTypes: {
      router: React.PropTypes.object
  }

  AppDispatcher.dispatch({
    actionType: 'LOGIN_USER',
    jwt: jwt
  });

  if (savedJwt !== jwt) {
    this.context.router.push('/')
    localStorage.setItem('jwt', jwt);
  }
},

อย่างไรก็ตาม ทั้งสองรายการไม่ทำงาน คนแรกบ่นเกี่ยวกับ "ข้อผิดพลาดในการบันทึกใน TypeError: ไม่สามารถอ่านคุณสมบัติ 'push' ของไม่ได้กำหนด" ในขณะที่คนที่สองบ่นเกี่ยวกับ "ข้อผิดพลาดในการบันทึกใน TypeError: ไม่สามารถอ่านคุณสมบัติ 'บริบท' ของไม่ได้กำหนด"

ใครสามารถช่วยฉันในเรื่องนี้? ติดอยู่ที่นี่หลายชั่วโมง ขอบคุณ!


person Yen Sheng    schedule 28.02.2016    source แหล่งที่มา
comment
คุณได้นำเข้าประวัติเบราว์เซอร์จาก react-router แล้วหรือยัง import { browserHistory } from 'react-router' นอกจากนี้ react-router เวอร์ชันใดที่ใช้อยู่   -  person Rohan Pujari    schedule 28.02.2016


คำตอบ (2)


การโทร this.context.router.push('/') จะไม่ทำงานไม่ว่าด้วยเหตุผลใดก็ตาม อย่างไรก็ตาม URL เปลี่ยนแปลงเมื่อใช้ browserHistory.push('/') ณ จุดนี้ หากคุณรีเฟรชเพจ ควรเปลี่ยนเพจ จากสิ่งที่ฉันได้อ่านมา ฉันไม่รู้ว่าการใช้เราเตอร์ตอบสนองเพื่อโหลดหน้าอื่นจากเซิร์ฟเวอร์ของคุณเป็นวิธีที่ดีที่สุด

person Community    schedule 27.05.2016

ปรากฎว่า browserHistory.push('/'); ทำงานได้ดี สาเหตุของความล้มเหลวนั้นเกิดจากไลบรารีรีแอคเตอร์เราเตอร์ที่ไม่ถูกต้อง

person Yen Sheng    schedule 29.02.2016
comment
คุณหมายถึงอะไรกับ ไลบรารีรีแอคเตอร์เราเตอร์ที่ไม่ถูกต้อง คุณแก้ไขปัญหานี้อย่างไร? - person nburk; 19.05.2016