• 1401/09/17

'getNotes' undefined :

با سلام خدمت استاد

جلسه 112 رو مانند کد شما   نوشتم و اجرا کردم نمی دونم چرا  getNotes    را پیدا نمی کند لطفا راهنمایی بفرمایید مرسی

import Realm from 'realm';

const NoteSchema = {
  name: 'Note',
  properties: {
    _id: 'string',
    title: 'string',
    content: 'string',
  },
  primaryKey: '_id',
};

export const realmDb = async () => {
  return await Realm.open({schema: [NoteSchema], schemaVersion: 1});
};
import React, {useEffect, createContext, useState} from 'react';
import {Alert} from 'react-native';
import {realmDb} from '../db/db';


export const NoteContext = createContext();

export const NoteProvider = props => {
  const [getNotes, setNotes] = useState([]);

  useEffect(() => {
    const getData = async () => {
      try {
        await dataAction('Sync');
      } catch (err) {
        console.log(err);
      }
    };

    getData();
  }, []);

  const addNote = async note => {
    await dataAction('Add', note);
    await dataAction('Sync');
  };

  const updateNote = async (note, id) => {
    await dataAction('Update', note, id);
    await dataAction('Sync');
  };

  const deleteNote = async id => {
    await dataAction('Delete', null, id);
    await dataAction('Sync');
  };

  const dataAction = async (action, note, id) => {
    try {
      const realm = await realmDb();

      switch (action) {
        case 'Sync':
          const notes = realm.objects('Note');
          return setNotes(notes);
        case 'Add':
          return realm.write(() => {
            realm.create('Note', note);
          });
        case 'Update':
          return realm.write(() => {
            const dbNote = realm.objectForPrimaryKey('Note', id);
            dbNote.title = note.title;
            dbNote.content = note.content;
          });
        case 'Delete':
          return realm.write(() => {
            realm.delete(realm.objectForPrimaryKey('Note', id));
          });
      }

      realm.close();
    } catch (err) {
      console.log(err);
      Alert.alert('خطای یاداشت', 'خطایی در ارتباط با پایگاه داده پیش آمده');
    }
  };

  return (
    <NoteContext.Provider value={{getNotes: getNotes, addNote, updateNote, deleteNote}}>
      {props.children}
    </NoteContext.Provider>
  );
};
import React, {useCallback, useState, useContext} from 'react';
import { SafeAreaView, View, FlatList, StyleSheet, StatusBar ,TouchableOpacity,} from 'react-native';
import { Button, Center, HStack, NativeBaseProvider, Pressable ,Text,Icon,Box} from 'native-base';
import { useFocusEffect } from '@react-navigation/native';

import Layout from '../Component/Layout';
import { NoteContext } from '../Context/NoteContext';
import NoteContent from '../Component/NoteContent';



const HomeScreen = props => {
  const [notes, setNotes] = useState([]);
  const context=useContext(NoteContext);
  
  useFocusEffect(
    useCallback(() => {
      setNotes(context.getNotes);
      }, [context.getNotes]),
  );
 
    

  return (
    <NativeBaseProvider> 
      
    <Layout title="یادداشتهای من" 
            footer={<Button full bg="violet.800" onPress={() => props.navigation.navigate('ADD')}>
                     <Text fontWeight={'bold'} color={'white'}  style={{fontFamily: 'Vazir'}}>اضافه کردن یاداشت جدید</Text>
                    </Button>}>
                    <FlatList
        data={notes}
        keyExtractor={note => note._id}
        renderItem={note => (
          <TouchableOpacity
            onPress={() =>
              props.navigation.navigate('Update', {id: note.item._id})
            }>
            <NoteContent note={{...note}} />
          </TouchableOpacity>
        )}
      />   
                    
    </Layout>
    </NativeBaseProvider> 
  );
  
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: StatusBar.currentHeight || 0,
  },
  item: {
    backgroundColor: '#f9c2ff',
    padding: 20,
    marginVertical: 8,
    marginHorizontal: 16,
  },
  title: {
    fontSize: 20,
  },
});
export default HomeScreen;
import React,{useState} from 'react';
import {
  Container,
  Center,
  Heading,
  Header,
  Footer,
  FooterTab,
  Title,
  NativeBaseProvider,
  StatusBar,
  Box,
  HStack,IconButton,Icon,Text, Pressable
  } from 'native-base';






export default  Layout = ({children, title,footer}) => {
  
  return (
    <NativeBaseProvider> 
          
      <HStack bg="violet.800" px="1" py="3" justifyContent="space-between" alignItems="center" w="100%" maxW="390">
       
          <Text color="white" fontSize="20" fontWeight="bold" alignSelf={"center"} alignContent="center" alignItems={'center'}>
             {title}
          </Text>
              
     </HStack>
      {children}
      {footer}
      
    
    </NativeBaseProvider>
  );
 
     
  
};


  • 1401/09/17
  • ساعت 18:32

سلام دوست من

کدهایی که در کنار ویدئو قرار دادم و کپی پیست کن به جای کدهای خودت ببین کار میکنه؟

اگر کار کرد باید خط به خط بررسی کنی چون اینجور خطاها برمیگرده به یک مشکل تایپی بسیار کوچک یا فراموش کردن یک () و ...

بررسی کن و بازم اگر مشکل بود خبر بده 


  • 1401/09/21
  • ساعت 10:52

استاد سلام

من  خیلی به  NoteContext  و  نحوه  export   شدن   getNotes     شک دارم   چون در فایل homescreen  

در قسمت  

useFocusEffect(
    useCallback(() => {
      setNotes(context.getNotes);
      }, [context.getNotes]),
  );   

اصلا توسط کد هوشمند  vs پیشنهاد نمی شود. هنوز مشکل         getNotes  پیدا نشد وجود دارد

ممنون مرسی

 


logo-samandehi