#javascript #react-native #methods #react-props #linechart
#javascript #react-native #методы #react-props #линейная диаграмма
Вопрос:
Предполагается, что мой код попросит пользователя выбрать диапазон из модального календаря, нажав Выбрать диапазон дат. Затем выполняется вызов api в MAIN и извлекаются данные из GOOGLE. Все работает нормально, теперь я хочу отобразить данные, идентифицированные как MyData в MAIN. Данные должны использоваться моим compenent BPM. У меня возникли проблемы с фактическим использованием MyData для заполнения графика. Как мы передаем переменную? Я новичок в React Native… помощь была бы очень признательна!
import React, { Component , useState} from "react";
import { Text, View, StyleSheet, Button, Dimensions} from "react-native";
const screenWidth = Dimensions.get("window").width;
var randomColor = Math.floor(Math.random()*16777215).toString(16);
import { DatePickerModal } from 'react-native-paper-dates'
import {
LineChart,
BarChart,
PieChart,
ProgressChart,
ContributionGraph,
StackedBarChart,
} from "react-native-chart-kit";
import axios from "axios";
import firebase from "firebase";
const BPM=()=>{
const myData= [1,2,4,5,6,7,3];
return(
<LineChart
data={{
title: "Beats per minute",
withVerticalLabels: true,
withHorizontalLabels: true,
datasets: [
{ data:
myData
}
]
}}
width={screenWidth} // from react-native
height={220}
chartConfig={
chartConfig
}
bezier
style={{
marginVertical: 8,
borderRadius: 16
}}
/>
)
}
export default class ProfileScreen extends Component {
MAIN = async (idToken, accessToken) =>{
const fit_data= await GFIT(accessToken, idToken)
UPLOAD_FIT_DATA(accessToken,idToken,fit_data)
const myData= (FORMAT_FIT_DATA(fit_data))
}
render() {
return (
<View style={styles.container}>
<Text> Profile Screen </Text>
<Text style={{ fontSize: 20, fontWeight: "bold" }}>
Welcome, {this.props.navigation.getParam("username")
}
</Text>
<Button
title="Update My Dashboard"
onPress={() =>{this.MAIN(this.props.navigation.state.params.idToken, this.props.navigation.state.params.accessToken)}}
/>
<Text>
{myData}
</Text>
<Calendar />
<BPM />
<Button
title="Sign out"
onPress={() => this.props.navigation.navigate("Login")}
/>
</View>
);
}
}
function FORMAT_FIT_DATA(fit_data){
const {minStartTimeNs, maxEndTimeNs,dataSourceId, point}=fit_data
let myData= [point.length]
for (let i=0; i<point.length;i )
{
myData[i]=point[i].value[0].fpVal
}
return(myData)
}
Ответ №1:
Похоже, что вы собираетесь визуализировать данные в компоненте BPM
Вы могли бы передать данные следующим props
образом: BPM
const BPM=(props)=>{
return(
<LineChart
data={{
title: "Beats per minute",
withVerticalLabels: true,
withHorizontalLabels: true,
datasets: [
{ data:
props.data
}
]
}}
width={screenWidth} // from react-native
height={220}
chartConfig={
chartConfig
}
bezier
style={{
marginVertical: 8,
borderRadius: 16
}}
/>
)
}
Im MAIN, мы могли бы сохранить myData
в состояние ProfileScreen
by
this.setState({ myData });
И в render()
методе ProfileScreen
<BPM data={this.state.myData} />
Комментарии:
1. Я пробовал это, но это говорит мне, что они не могут найти переменную myData. Кроме того, когда я пишу «data= {myData}» в моем вызове компонента BPM, переменная myData в MAIN по-прежнему не выделена жирным шрифтом, что указывает на то, что я на самом деле не вызываю переменную из своей функции рендеринга. Это проблема, с которой я столкнулся, и не уверен, как ее исправить. Я просто не могу передать myData из main в render(), а затем в BPM. Есть мысли?
2. Я думаю, вы могли бы сохранить myData в
MAIN
состоянииProfileScreen
кthis.setState({ myData });
тому времени в методе рендеринга,<BPM data={this.state.myData} />
3. спасибо, у меня получилось! удачи, брат / сестра!
4. Мне немного любопытно… Как вы заставляете это работать?