Ich habe einen MobX-Speicher wie die folgende Store
Klasse. Wenn ich auf this.user.permits.db
zugreifen möchte, erhalte ich einen Fehler, der this.user
undefiniert ist. Ich frage mich, warum ich nicht auf die @observable user
zugreifen kann.Zugriff auf eine Variable innerhalb derselben Klasse nicht möglich
src/ui/store/store.js
Datei:
import { action, observable } from 'mobx'
import { useStrict } from 'mobx';
useStrict(true);
class Store {
constructor(){
//
}
@observable user
@action setUser=(user)=>{
this.user=user
}
@observable menus=[
{menu1: 'DATABASE',
/*menu2s: ['PC', 'NETWORK', 'TEL', 'PTT'],*/ //-> this line works fine
menu2s: this.user.permits.db, //-> this line gives an error: Cannot read property 'permits' of undefined
}
]
}
export default new Store
src/ui/ui.js
Datei, die Speicher vonstore.js
importiert:
import React from 'react'
import ReactDOM from 'react-dom'
import Layout from './components/layout.js'
import Store from './store/store.js'
//user comes from HTTP GET request
Store.setUser(user)
ReactDOM.render(<Layout store={Store}/>,document.getElementById('ui'))
src/views/profile.ejs
Datei,user
zu JavaScript vorbei:
UPDATE:
<!DOCTYPE html>
<html lang='en'>
<head>
<title>User profile</title>
<link href="/css/style.css" rel="stylesheet" type="text/css">
</head>
<!--
Pass variables from http GET to JavaScript
also block script injection attacks
ref: https://stackoverflow.com/a/16098699/7312233
-->
<script>
function htmlDecode(input){
var e=document.createElement('div');
e.innerHTML=input;
return e.childNodes.length===0?"":e.childNodes[0].nodeValue;
}
var user=JSON.parse(htmlDecode("<%= JSON.stringify(user) %>"));
</script>
<div id="ui"></div>
<script src="/js/ui.bundle.js"></script>
</html>
A
permits
Feld auf einem Dokument Benutzer Probe auf CouchDB Benutzerdatenbank wie unten definiert istAuch this sollte ebenfalls korrigiert werden.
Ich habe versucht, aber sieht aus wie das Problem hängt damit zusammen, wie CouchDB ein Feld eines Dokuments paresiert. 'console.log ('user.permits:' + user.permits)' Ausgabe ist 'user.permits: {db: ['TEL', 'PTT',]}' und 'console.log ('user.permits. db: '+ user.permits.db) 'zeigt' user.permits.db: undefined' – user3405291
Daher ist 'user.permits' gut, aber' user.permits.db' kann nicht aufgerufen werden. – user3405291
In Verbindung mit [diese Antwort] (http://stackoverflow.com/a/41829238/7312233) hat Ihre Lösung funktioniert, danke! – user3405291