2016-11-02 7 views
5

पर नया राज्य कैसे सहेजें मेरे पास एक स्थानीय JSON फ़ाइल है जिसका उपयोग सभी डेटा को ऐप में लोड करने के लिए किया जाता है। एक घटक में मैं constructor() उन डेटा में लोड करता हूं। फ़ंक्शन addRow() में मैं नया फ़ील्ड जोड़ता हूं लेकिन यह केवल स्थानीय स्टेट वैरिएबल में है। मैं इसे जेसन फ़ाइल में भी जोड़ना चाहता हूं, इसलिए रीफ्रेश करने के बाद यह नई पंक्ति अभी भी यहां होगी।स्थानीय जेसन

मैं यह कोशिश कर रहा था कि यह वास्तव में कैसे हल हुआ लेकिन मुझे यह नहीं मिला। यदि आप किसी विषय के बारे में जानते हैं तो मुझे यह भेजें।

constructor() { 
    super(); 
    this.state = { 
     employees: require('json!../../../data/employees.json') 
    }; 
    this.addEmployee = this.addEmployee.bind(this); 
} 

addEmployee(employee) { 
    this.setState({ 
     employees: this.state.employees.concat([employee]) 
    }); 
} 
+0

POST अनुरोध + सर्वर साइड स्क्रिप्ट जेसन फ़ाइल को लिखने के लिए। – dfsq

+0

या प्रतिक्रिया के लिए कुछ जावास्क्रिप्ट (node.js) प्लगइन जो जेसन – Mardzis

+0

के साथ काम कर सकते हैं नहीं, आप केवल क्लाइंट साइड कोड के साथ फाइल नहीं लिख सकते हैं, आपको इसके लिए बैकएंड की आवश्यकता है। – dfsq

उत्तर

3

सुरक्षा कारणों से आप ब्राउज़र से फ़ाइल सिस्टम तक नहीं पहुंच सकते हैं। यदि आप रीफ्रेशिंग के बाद बस इसे एक्सेस करना चाहते हैं, तो मुझे लगता है कि जब आप राज्य को संशोधित करते हैं तो आप इसे स्थानीय स्टोरेज में सहेज सकते हैं और फिर घटक को लोड करते समय इसका उपयोग करते हैं, यदि यह अनिर्धारित नहीं है (आप इसे घटकडिडमाउंट में देख सकते हैं)। (नीचे दिए गए कोड का परीक्षण नहीं किया गया है)

addEmployee(employee) { 
    let newEmployees = this.state.employees.concat([employee]) 
    localStorage.setItem('employees', JSON.stringify(newEmployees)); 
    this.setState({ 
     employees: newEmployees 
    }); 
} 


componentDidMount(){ 
    let newEmployees = localStorage.employees 
    if(newEmployees != undefined){ 
     this.setState({ 
      employees: JSON.parse(newEmployees) 
     }); 
    } 
} 

आपको लगता है कि JSON लगातार संग्रहीत करना चाहते हैं और आप ताज़ा करने के बाद इसका इस्तेमाल करने में सक्षम होने की तुलना में अधिक चाहते हैं, तो आप इसे बैकएंड पर क्या करना चाहिए। आप उपयोगकर्ता को मैन्युअल रूप से फ़ाइल को डाउनलोड करने की अनुमति दे सकते हैं (डाउनलोड प्रॉम्प्ट के साथ) क्योंकि यह here वर्णित है।

+0

'अगर (स्थानीय स्टोरेज.मैपेटीज़! = अपरिभाषित) {' बदले में 'कर्मचारी' – Mardzis

+0

प्लस जोड़ने के दौरान मुझे एक त्रुटि मिलती है 'अनकॉटेड टाइप एरर: JSON.stringfy एक फ़ंक्शन नहीं है (...) '। क्या मुझे इसके लिए कुछ पुस्तकालय आयात करना है? मैंने सोचा कि यह एक अंतर्निहित कार्य है। – Mardzis

+0

ओएमजी केवल एक टाइपो है, lol – Mardzis

0

क्लाइंट/ब्राउज़र से ऐसा करने का कोई तरीका नहीं है, क्योंकि उनके पास फ़ाइल सिस्टम (फॉर्म सुरक्षा विचारों) तक पहुंच नहीं है। आप इसे बैकएंड पर करना होगा।