我正在使用React。我試著改變被點擊的圖片的樣式。但是狀態被應用到使用此函數的所有元素。 onClick事件應用於圖片。點擊其中一個,其他圖片的邊框顏色應該改變為#a2a0ff。只有被點擊的圖片應該有顏色#4D4AFF。
import React from "react"; import './SearchPower.css'; import { YMaps, Map, Placemark} from '@pbe/react-yandex-maps'; function App() { // 定义用户地理位置 var getLocationPromise = new Promise((resolve) => { navigator.geolocation.getCurrentPosition(async function (position) { resolve([position.coords.latitude, position.coords.longitude]) }) }) var [lat, setLat] = React.useState(0) var [lng, setLng] = React.useState(0) getLocationPromise.then((location) => { setLat(location[0]) setLng(location[1]) }) if (lat == 0 && lng == 0) { lat = 55.75 lng = 37.57 } // 创建地图 var myMap = React.useMemo( () => ({ center: [lat, lng], zoom: 9 }) ); // 处理标记 const [imageHref, setImageHref] = React.useState("images/Marks/ZemMark.png"); const [ImgStyle, setImgStyle] = React.useState() function changeGeoPosition(newLink) { setImageHref(newLink); setImgStyle("5px solid #4D4AFF") } return ( <div className="ContextSP"> <div className="DivMarks"> <img className="MarkLeftImage" src="images/Marks/ZemMark.png" onClick={function() {changeGeoPosition("images/Marks/ZemMark.png")}} style={{borderBottom: ImgStyle}}/> <img className="MarkImage" src="images/Marks/Redcar1Mark.png" onClick={function() {changeGeoPosition("images/Marks/Redcar1Mark.png")}} style={{borderBottom: ImgStyle}}/> <img className="MarkImage" src="images/Marks/Redcar2Mark.png" onClick={function() {changeGeoPosition("images/Marks/Redcar2Mark.png")}} style={{borderBottom: ImgStyle}}/> <img className="MarkImage" src="images/Marks/GreencarMark.png" onClick={function() {changeGeoPosition("images/Marks/GreencarMark.png")}} style={{borderBottom: ImgStyle}}/> <img className="MarkRightImage" src="images/Marks/YellowcarMark.png" onClick={function() {changeGeoPosition("images/Marks/YellowcarMark.png")}} style={{borderBottom: ImgStyle}}/> </div> <YMaps> <Map style={{width: '100%', height: '100%', margin: '0 0 10px 0', border: '3px solid #4D4AFF'}} state={myMap}> <div id="Prnt"> <Placemark geometry={[lat, lng]} options={{ iconLayout: 'default#image', iconImageHref: imageHref, iconImageSize: [40, 40], iconImageOffset: [0, 0], iconOffset: [-5, -38] }} id="myPosition"></Placemark> </div> </Map> </YMaps> </div> ) } export default App;
您只有一個名為
ImgStyle
的變量,它應用於所有圖像的樣式,並且其值設置為所有onclick
事件,所以它們的樣式總是相同的。要以這種方式做到這一點,您需要5個單獨的狀態變數 - 每個圖像一個。但我假設您實際上只想在最多一個圖像上顯示邊框 - 剛剛點擊的圖像 - 在這種情況下,您根本不需要單獨的狀態變數。只需根據當前的
imageHref
和圖像的實際href計算樣式:然後為每個圖像應用它(下面僅顯示一個示例,但應該很明顯如何應用於其他圖像):
您也可以透過建立一個
href
字串數組,並透過map
函數遍歷產生每個img
標籤來進一步簡化此過程。