#javascript #css #reactjs
#javascript #css #reactjs
Вопрос:
Прямо сейчас я учусь программировать в React. Я работаю над клоном Amazon, и он продвигается, я смог решить все проблемы, с которыми я столкнулся (в основном потому, что они были относительно тривиальными), но эта последняя проблема действительно меня заблокировала, и пока я продолжаю находить исправление, я подумал, почему бы не создать учетную запись Stack Overflow и спроситьи здесь тоже.
Вот в чем ошибка:
Error: Objects are not valid as a React child (found: object with keys {value}). If you meant to render a collection of children, use an array instead.
▶ 17 stack frames were collapsed.
(anonymous function)
src/index.js:9
6 | import reducer, { initialState } from "./reducer";
7 | import { StateProvider } from "./StateProvider";
8 |
> 9 | ReactDOM.render(
10 | <React.StrictMode>
11 | <StateProvider initialState={initialState} reducer={reducer}>
12 | <App />
View compiled
./src/index.js
http://localhost:3000/static/js/main.chunk.js:2644:34
__webpack_require__
/Users/code/marketplace-app/webpack/bootstrap:851
848 |
849 | __webpack_require__.$Refresh$.init();
850 | try {
> 851 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
| ^ 852 | } finally {
853 | __webpack_require__.$Refresh$.cleanup(moduleId);
854 | }
View compiled
fn
/Users/code/marketplace-app/webpack/bootstrap:150
147 | );
148 | hotCurrentParents = [];
149 | }
> 150 | return __webpack_require__(request);
| ^ 151 | };
152 | var ObjectFactory = function ObjectFactory(name) {
153 | return {
View compiled
(anonymous function)
http://localhost:3000/static/js/main.chunk.js:2977:37
__webpack_require__
/Users/code/marketplace-app/webpack/bootstrap:851
848 |
849 | __webpack_require__.$Refresh$.init();
850 | try {
> 851 | modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
| ^ 852 | } finally {
853 | __webpack_require__.$Refresh$.cleanup(moduleId);
854 | }
View compiled
checkDeferredModules
/Users/code/marketplace-app/webpack/bootstrap:45
42 | }
43 | if(fulfilled) {
44 | deferredModules.splice(i--, 1);
> 45 | result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
| ^ 46 | }
47 | }
48 |
View compiled
webpackJsonpCallback
/Users/code/marketplace-app/webpack/bootstrap:32
29 | deferredModules.push.apply(deferredModules, executeModules || []);
30 |
31 | // run deferred modules when all chunks ready
> 32 | return checkDeferredModules();
| ^ 33 | };
34 | function checkDeferredModules() {
35 | var resu<
View compiled
global code
http://localhost:3000/static/js/main.chunk.js:1:87
This screen is visible only in development. It will not appear if the app crashes in production.
Вот Checkout.js файл, из которого, как я думаю, исходит код:
import React from "react";
import "./Checkout.css";
import Subtotal from "./Subtotal";
import { useStateValue } from "./StateProvider";
import CheckoutProduct from "./CheckoutProduct";
function Checkout() {
const [{ basket, user }, dispatch] = useStateValue();
return (
<div className="checkout">
<div className="checkout__left">
<img
className="checkout__ad"
src="https://images-na.ssl-images-amazon.com/images/G/02/UK_CCMP/TM/OCC_Amazon1._CB423492668_.jpg"
alt=""
/>
<div>
<h3>Hello, {user?.email}</h3>
<h2 className="checkout__title">Your shopping Basket</h2>
{basket.map(item => (
<CheckoutProduct
id={item.id}
title={item.title}
image={item.image}
price={item.price}
rating={item.rating}
/>
))};
</div>
</div>
<div className="checkout__right">
<Subtotal />
</div>
</div>
);
}
export default Checkout;
Вот это самое index.js файл:
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
import reducer, { initialState } from "./reducer";
import { StateProvider } from "./StateProvider";
ReactDOM.render(
<React.StrictMode>
<StateProvider initialState={initialState} reducer={reducer}>
<App />
</StateProvider>
</React.StrictMode>,
document.getElementById("root")
);
Subtotal.js файл:
import React from "react";
import "./Subtotal.css";
import CurrencyFormat from "react-currency-format";
import { useStateValue } from "./StateProvider";
import { getBasketTotal } from "./reducer";
import { useHistory } from "react-router-dom";
function Subtotal() {
const history = useHistory();
const [{basket},dispatch] = useStateValue();
return (
<div className="subtotal">
<CurrencyFormat
renderText={(value) => (
<>
<p>
Subtotal ({basket.length} items):
<strong>{{value}}</strong>
</p>
<small className="subtotal__gift">
<input type="checkbox" /> This order contains a gift
</small>
</>
)}
decimalScale={2}
value={getBasketTotal(basket)}
displayType={"text"}
thousandSeparator={true}
prefix={"$"}
/>
<button onClick={e => history.push('/payment')}>Proceed to Checkout</button>
</div>
);
}
export default Subtotal
Я создал папку с помощью команды npx create-react-app template и не могу найти решение. Любая помощь будет высоко оценена!
Ответ №1:
Эта ошибка в React является распространенной, и она в точности соответствует тому, что там написано. Это не позволяет вам отображать сами объекты в DOM. Это приведет к ошибке, потому что он не будет знать, что с ними делать. Вы должны настроить таргетинг на определенные ключи внутри каждого объекта и отображать их вместо этого. Я бы начал с этого, поскольку это, вероятно, корень вашей проблемы.