【发布时间】:2021-06-18 08:11:31
【问题描述】:
我试图在 search.js 和 result.js 组件之间使用 react useContext 挂钩,但不知何故它不起作用。
我想将数据从一个组件发送到另一个组件。使用 props 有点复杂,所以我决定使用 context api。我也增加了价值,但为什么它不可迭代?它到达了结果组件,但是 contextApi 的破坏线在这里造成了一个大问题。
我得到的错误是 TypeError: Object is not iterable (cannot read property Symbol(Symbol.iterator))
search.js 代码 ->
import React, { createContext, useState } from 'react';
import { useHistory, useParams } from 'react-router';
import './Search.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import { Link } from 'react-router-dom';
import vehicleData from '../Home/vehicleData.json';
export const PlaceContext = createContext();
const Search = () => {
const [searchPlace, setSearchPlace] = useState({
from: '',
to: ''
})
const [route, setRoute] = useState({
from: '',
to: ''
})
const {type} = useParams();
let ride;
vehicleData.map(vehicle => {
if(vehicle.Name === type) {
ride = vehicle.Name;
}
})
const handleBlur = (event => {
const newSearchPlace = {...searchPlace}
newSearchPlace[event.target.name] = event.target.value;
setSearchPlace(newSearchPlace);
})
const history = useHistory();
const resultPage = rideOption => {
const url = `/result/${rideOption}`;
history.push(url);
console.log("pacche");
}
const handleClick = (event) => {
if (searchPlace.from && searchPlace.to) {
setRoute(searchPlace);
console.log(searchPlace, " && ", route);
}
}
console.log(searchPlace);
return (
<PlaceContext.Provider value={[searchPlace, setSearchPlace]}>
<div className="d-flex flex-column searchField">
<div className="inputArea">
<h4>From</h4>
<input onBlur={handleBlur} name="from" id="fromField" type="text" placeholder="Type Your Starting Point" />
</div>
<div className="inputArea">
<h4>To</h4>
<input onBlur={handleBlur} name="to" id="toField" type="text" placeholder="Type Your Destination Point" />
</div>
<button onMouseEnter={handleClick} onClick={() => resultPage(ride)} className="checkBtn btn btn-success btn-outline-info btn-lg m-3">Check</button>
</div>
</PlaceContext.Provider>
);
};
export default Search;
和 result.js 代码 ->
import { useParams } from 'react-router';
import 'bootstrap/dist/css/bootstrap.min.css';
import './Result.css';
import vehicleData from '../Home/vehicleData.json';
import { PlaceContext } from '../Search/Search';
const Result = () => {
const [searchPlace, setSearchPlace] = useContext(PlaceContext);
console.log(searchPlace);
const {ride} = useParams();
let transportOption = ride;
let transportName, transportImg;
vehicleData.map(vehicle => {
if(vehicle.Name === transportOption) {
transportName = vehicle.Name;
transportImg = vehicle.imgUrl;
}
})
return (
<div className="d-flex justify-content-between showComponent">
<div className="placeAndPrice">
<div className="placeName">
<p>From : {}</p>
<p>To : {}</p>
</div>
<div className="d-flex justify-content-around pricePart">
<img src={transportImg}/>
<div className="d-flex flex-column priceBox">
<p>{transportName}</p>
<p>131 Taka</p>
</div>
</div>
</div>
<div className="mapBox">
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d7304.049644099905!2d90.3781836249269!3d23.746494238365205!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x3755b8b0e848958f%3A0xd56e2e3180c6a3ce!2sKalabagan%2C%20Dhaka%201205!5e0!3m2!1sen!2sbd!4v1616325753856!5m2!1sen!2sbd" loading="lazy"></iframe>
</div>
</div>
);
};
export default Result;```
So what is the error and how to solve it?
【问题讨论】:
标签: javascript reactjs react-hooks typeerror