здесь я пытаюсь получить сумму заказов и сумму их количества, в которой я использую Узел JS для своего бэкэнда. Проблема в том, что всякий раз, когда я запускаю свой код, мои функции выборки не работают должным образом или мне не хватает чего-то, о чем я не знаю.
Но с помощью почтальона мой API работает с ожидаемым результатом. Но, если я использую его в своем коде, ориентированном на реакцию, он показывает некоторые ошибки.
Вот мой код для бэкэнда:
OrderNo.js (модели) // Бэкэнд
var Task = {
Sum:function(id,callback) {
return db.query("SELECT SUM(order_amount) AS TotalAmountOrdered FROM orders where order_no=?",[id],callback);
},
}
OrderNo.js (router) // Бэкэнд
var Task = require('../models/OrderNo');
router.get('/ForSum/:id?', (req, res, next) => {
Task.Sum(req.params.id,function(err,rows) {
if (err) {
res.json(err);
}
else {
res.json(rows);
}
});
});
NumOrder.js (модели) // Бэкэнд
var Task = {
NumOrder:function(id,callback) {
return db.query("SELECT SUM(order_quantity) AS TotalItemsOrdered FROM orders where order_no=?",[id],callback);
},
}
NumOrder.js (router) // Бэкэнд
var Task = require('../models/NumOrder');
router.get('/num/:id?', (req, res, next) => {
Task.NumOrder(req.params.id,function(err,rows) {
if (err) {
res.json(err);
}
else {
res.json(rows);
}
});
});
А вот мой код для React-Native
export default class Settlement extends Component {
constructor(props){
super(props)
this.state = {
orderDet: this.props.navigation.state.params.orderDet,
numOrder: [],
TotalSum: [],
};
}
fetchSum = async () => {
const response = await fetch("http://192.168.254.104:3308/OrderNo/ForSum/" + this.state.orderDet)
const json = await response.json()
this.setState({ TotalSum: json })
}
fetchNumOrders = async () => {
const response = await fetch("http://192.168.254.104:3308/NumOrder/num/" + this.state.orderDet )
const json = await response.json()
this.setState({ numOrder: json })
}
componentDidMount() {
this.fetchNumOrders();
this.fetchSum();
}
render() {
return (
<View>
<Text>Number of Orders: { this.state.numOrder }</Text>
<Text>Total Amount: ₱{ this.state.TotalSum }</Text>
</View>
)
}
}
А вот и моя БД
** PS: ** Я также пробовал "json [0] .order_no" для каждой из моих функций выборки, и ошибок не было, но мой вывод пуст.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Основываясь на вашем объекте ответа в Postman, вам необходимо сделать следующее
this.state = {
orderDet: this.props.navigation.state.params.orderDet,
numOrder: null,
TotalSum: null,
};
fetchSum = async () => {
const response = await fetch("http://192.168.254.104:3308/OrderNo/ForSum/" + this.state.orderDet)
const json = await response.json()
this.setState({ TotalSum: json[0].TotalAmountOrdered })
}
fetchNumOrders = async () => {
const response = await fetch("http://192.168.254.104:3308/NumOrder/num/" + this.state.orderDet )
const json = await response.json()
this.setState({ numOrder: json[0].TotalItemsOrdered })
}
Неважно, вам просто нужно позаботиться о том, чтобы не отображать объекты непосредственно в реакции, а только значения. Если есть массив, используйте функцию map и т. д. Посмотрите примеры, чтобы узнать больше.
Ошибка означает, что у вас не может быть объекта или массива в качестве дочернего компонента, то есть <Text>. Внутри компонента может отображаться только строка или число.
<Text>Number of Orders: { this.state.numOrder[0].TotalAmountOrdered }</Text>// Inside {} value of variable should be string or number not array or object
Ошибка в том, что вы устанавливаете значение this.state.numOrder в виде массива
Оно работает! спасибо, сэр, так что это псевдоним, который нужно написать, не так ли? Почему?