Форум программистов, компьютерный форум, киберфорум
React/ReactJS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268

Не сохраняются данные в массив

13.08.2022, 17:44. Показов 911. Ответов 2

Студворк — интернет-сервис помощи студентам
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import { StatusBar } from "expo-status-bar";
import { useEffect, useRef, useState } from "react";
import {
  StyleSheet,
  Text,
  SafeAreaView,
  Image,
  Button,
  TextInput,
} from "react-native";
import {
  TouchableHighlight,
  TouchableOpacity,
  TouchableNativeFeedback,
} from "react-native";
import { Dimensions } from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
 
export default function HomeScreen({ navigation }) {
  let [PreviousEntryValue, setPreviousEntryValue] = useState(null);
  let [NewEntryValue, setNewEntryValue] = useState(null);
  let [RateValue, setRateValue] = useState(null);
  let [Entries, setEntries] = useState([null]);
  let ResultValue = findSum();
 
  function findSum() {
    let result = (NewEntryValue - PreviousEntryValue) * RateValue;
    return result;
  }
 
  function handleEntries() {
    setEntries([
      ...Entries,
      {
        id: Entries.length.toString(),
        PreviousEntryValue: PreviousEntryValue,
        NewEntryValue: NewEntryValue,
        RateValue: RateValue,
        ResultValue: ResultValue.toString(),
      },
    ]);
 
    console.log(Entries);
    console.log(PreviousEntryValue, NewEntryValue, RateValue, ResultValue);
  }
 
  return (
    <SafeAreaView style={styles.container}>
      <Text style={styles.title}>Вода</Text>
      <TouchableOpacity
        style={styles.backContainer}
        onPress={() => navigation.navigate("Home")}
      >
        <Image
          source={require("../assets/back-icon.png")}
          style={styles.back}
        />
      </TouchableOpacity>
 
      <Text style={styles.previousEntry}>Попередні показання</Text>
      <TextInput
        style={styles.input}
        placeholder="0000"
        onChangeText={(value) => setPreviousEntryValue(value)}
        keyboardType="numeric"
      ></TextInput>
 
      <Text style={styles.newEntry}>Нові показання</Text>
      <TextInput
        style={styles.input}
        placeholder="0000"
        onChangeText={(value) => setNewEntryValue(value)}
        keyboardType="numeric"
      ></TextInput>
      <Text style={styles.rate}>Тариф</Text>
      <TextInput
        style={styles.input}
        placeholder="0000"
        onChangeText={(value) => setRateValue(value)}
        keyboardType="numeric"
      ></TextInput>
      <Text style={styles.sum}>Сума до сплати</Text>
      <TextInput
        style={styles.output}
        placeholder="0000"
        editable={false}
        value={ResultValue.toString()}
      ></TextInput>
 
      <TouchableOpacity
        onPress={() => {
          handleEntries();
          storeData();
        }}
        style={styles.button}
      >
        <Text style={styles.buttonText}>Зберегти до архіву</Text>
      </TouchableOpacity>
    </SafeAreaView>
  );
}
Всем привет! Нужно сделать программу которая брала бы значения полей и записывала их по нажатию кнопки в массив объектов. (React Native)



Но есть такая проблема, когда нажимаю на кнопку оно срабатывает будто через один, то-есть нажал на кнопку:

Code
1
2
3
4
5
6
7
8
9
Object {
    "NewEntryValue": "2",
    "PreviousEntryValue": "123",
    "RateValue": "1",
    "ResultValue": "-121",
    "id": "3",
  },
]
123 2 1 -121 (текущие значения полей)

Вот оно вроде все норм записало, потом нажимаю еще раз, уже с другими значениями

Code
1
2
3
4
5
6
7
8
9
 Object {
    "NewEntryValue": "2",
    "PreviousEntryValue": "123",
    "RateValue": "1",
    "ResultValue": "-121",
    "id": "4",
  },
]
2 21 13 247 (текущие значения полей)
А оно все равно берет прошлые, а вот теперь когда я еще раз нажму на кнопку оно запишет по настоящему текущие значения полей, но уже в следующий индекс
Code
1
2
3
4
5
6
7
8
9
Object {
    "NewEntryValue": "21",
    "PreviousEntryValue": "2",
    "RateValue": "13",
    "ResultValue": "247",
    "id": "5",
  },
]
2 21 13 247 (текущие значения полей)
Помогите пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.08.2022, 17:44
Ответы с готовыми решениями:

Не сохраняются данные в БД
Здравствуйте! Пишу приложение для КПК - база данных. При добавлении записей они не сохраняются в БД. Использую SQLCe 1. Добавил...

Не сохраняются данные
Здравствуйте, это снова я) сама не рада, что опять задаю вопросы, но это в последний раз, обещаю, буду учиться сама Суть вот в чем, есть...

Не сохраняются данные в БД
Подскажите пожалуйста, что я делаю не так. БД acsess подключена в delphi, если я вношу или удаляю данные в acsess, все сохраняется, если...

2
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,147
Записей в блоге: 14
13.08.2022, 19:46
Лучший ответ Сообщение было отмечено vadyansky как решение

Решение

функция setEntries отслеживайте изменения через useEffect
1
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
13.08.2022, 20:18  [ТС]
mr_dramm, а как мне в useeffect отследить что кнопку нажали?

Добавлено через 9 минут
mr_dramm, спасибо я понял и получилось!!

Добавлено через 2 минуты
mr_dramm,

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import { StatusBar } from "expo-status-bar";
import { useEffect, useRef, useState } from "react";
import {
  StyleSheet,
  Text,
  SafeAreaView,
  Image,
  Button,
  TextInput,
} from "react-native";
import {
  TouchableHighlight,
  TouchableOpacity,
  TouchableNativeFeedback,
} from "react-native";
import { Dimensions } from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
 
const windowWidth = Dimensions.get("window").width;
const windowHeight = Dimensions.get("window").height;
 
export default function HomeScreen({ navigation }) {
  let [PreviousEntryValue, setPreviousEntryValue] = useState(null);
  let [NewEntryValue, setNewEntryValue] = useState(null);
  let [RateValue, setRateValue] = useState(null);
  let [Entries, setEntries] = useState([null]);
  let [ButtonPressed, setButtonPressed] = useState(false);
  let ResultValue = findSum();
 
  function findSum() {
    let result = ((NewEntryValue - PreviousEntryValue) * RateValue).toFixed(2);
    return result;
  }
 
  const getData = async () => {
    try {
      const jsonValue = await AsyncStorage.getItem("@WaterEntries");
      console.log(jsonValue);
      return jsonValue != null ? setEntries(JSON.parse(jsonValue)) : null;
    } catch (e) {
      console.log(e);
    }
  };
 
  const storeData = async () => {
    try {
      const jsonValue = JSON.stringify(Entries);
      await AsyncStorage.setItem("@WaterEntries", jsonValue);
    } catch (e) {
      console.log(e);
    }
  };
 
  useEffect(() => {
    getData();
  }, []);
 
  useEffect(() => {
    setButtonPressed(false);
    setEntries([
      ...Entries,
      {
        id: Entries.length.toString(),
        PreviousEntryValue: PreviousEntryValue,
        NewEntryValue: NewEntryValue,
        RateValue: RateValue,
        ResultValue: ResultValue.toString(),
      },
    ]);
 
    console.log(Entries);
    console.log(PreviousEntryValue, NewEntryValue, RateValue, ResultValue);
  }, [ButtonPressed]);
 
  return (
    <SafeAreaView style={styles.container}>
      <Text style={styles.title}>Вода</Text>
      <TouchableOpacity
        style={styles.backContainer}
        onPress={() => navigation.navigate("Home")}
      >
        <Image
          source={require("../assets/back-icon.png")}
          style={styles.back}
        />
      </TouchableOpacity>
 
      <Text style={styles.previousEntry}>Попередні показання</Text>
      <TextInput
        style={styles.input}
        placeholder="0000"
        onChangeText={(value) => setPreviousEntryValue(value)}
        returnKeyType="done"
        keyboardType="numeric"
      ></TextInput>
 
      <Text style={styles.newEntry}>Нові показання</Text>
      <TextInput
        style={styles.input}
        placeholder="0000"
        onChangeText={(value) => setNewEntryValue(value)}
        returnKeyType="done"
        keyboardType="numeric"
      ></TextInput>
      <Text style={styles.rate}>Тариф</Text>
      <TextInput
        style={styles.input}
        placeholder="0000"
        onChangeText={(value) => setRateValue(value)}
        returnKeyType="done"
        keyboardType="numeric"
      ></TextInput>
      <Text style={styles.sum}>Сума до сплати</Text>
      <TextInput
        style={styles.output}
        placeholder="0000"
        editable={false}
        value={ResultValue.toString()}
      ></TextInput>
 
      <TouchableOpacity
        onPress={() => {
          setButtonPressed(true);
          storeData();
        }}
        style={styles.button}
      >
        <Text style={styles.buttonText}>Зберегти до архіву</Text>
      </TouchableOpacity>
    </SafeAreaView>
  );
}
Только у меня почему то нулевой элемент всегда null, а дальше он начинает записывать с 1 индекса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2022, 20:18
Помогаю со студенческими работами здесь

Не сохраняются данные БД
Не сохраняются данные в саму базу данных если просто в форме вводить данные и сохранит то о ни буду до тех пор если мы не нажмем кнопку...

Не сохраняются данные в бд
Такая вот ситуация, запускаю приложение, заполняю таблицу, сохраняю, останавливаю отладку и дальше захожу в бд все нормально сохранилось....

Не сохраняются данные в БД
SqlConnection sqlcon = new SqlConnection(connect); try { sqlcon.Open(); ...

Не сохраняются данные в БД
Почему у меня в базу приходят пустые значения ? =( &lt;label&gt;Логин:&lt;/label&gt; &lt;input name=&quot;reg_login&quot;...

Данные не сохраняются в БД
Подскажите как сохранять базу данных. Я запускаю созданную программу и ввожу в dataGridView данные, но при следующим запуске программы база...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru