Попытка объединить пользовательский ввод в массив — react native

#javascript #react-native

#javascript #react-native

Вопрос:

Я хочу принять пользовательский ввод и обновить свою гистограмму в соответствии со значением оси Y, введенным пользователем. Однако моя функция updateArray в настоящее время обновляет гистограмму. Есть идеи?

 import React, { useState, useEffect } from 'react';
import { View, StyleSheet, Dimensions, Text, TextInput, TouchableOpacity } from 'react-native';
import { BarChart, Grid } from 'react-native-svg-charts'

export default function App() {

        const fill = 'rgb(134, 65, 244)'
        const data = [50,10]
        const [newData, setnewData] = useState(null)

        useEffect(() => {

        })
        const updateArray = () => {
          data.concat(newData)
        }
        return (
          <View>
            <BarChart style={{ height: 200 }} data={data} svg={{ fill }} contentInset={{ top: 30, bottom: 30 }}>
                <Grid />
            </BarChart>
            <TextInput
                   style={styles.textArea}
                   underlineColorAndroid="transparent"
                   numberOfLines={1}
                   autoCapitalize="none"
                   value={newData}
                   onChangeText={(newData) => setnewData(newData)}
                 />
                 <TouchableOpacity style={styles.buttons} onPress={updateArray}>
                      <Text>Apply</Text>
                    </TouchableOpacity>

        </View>
        )
    }
  

Ответ №1:

Приведите свои данные в состояние. затем обновите свое состояние.

 import React, { useState, useEffect } from 'react';
import { View, StyleSheet, Dimensions, Text, TextInput, TouchableOpacity } from 'react-native';
import { BarChart, Grid } from 'react-native-svg-charts'

export default function App() {

        const fill = 'rgb(134, 65, 244)'
        const [data, setData] = useState([50,10])
        const [newData, setnewData] = useState(null)

        useEffect(() => {

        })
        const updateArray = () => {
          data.concat(newData)
        }
        const updateArray = useCallback(()=>{
           setData(data => data.conncat(newData))
        }, [setData, newData])

        return (
          <View>
            <BarChart style={{ height: 200 }} data={data} svg={{ fill }} contentInset={{ top: 30, bottom: 30 }}>
                <Grid />
            </BarChart>
            <TextInput
                   style={styles.textArea}
                   underlineColorAndroid="transparent"
                   numberOfLines={1}
                   autoCapitalize="none"
                   value={newData}
                   onChangeText={(newData) => setnewData(newData)}
                 />
                 <TouchableOpacity style={styles.buttons} onPress={updateArray}>
                      <Text>Apply</Text>
                    </TouchableOpacity>

        </View>
        )
    }