【问题标题】:for each car click I need to show the car name in the browser对于每辆车点击我需要在浏览器中显示车名
【发布时间】:2019-10-29 21:25:29
【问题描述】:
  • 每次点击汽车,我都需要在浏览器中显示汽车名称。

    • 我以为我会在react中使用类似于js的e.target.innerText
    • 但它不起作用。
    • 使用 map 我能够迭代数组。
    • 但不知道如何实现点击事件。
    • 我是否使用 useState correclty 来设置车名
    • 在下面提供我的代码 sn-p 和 sanbox。

    https://codesandbox.io/s/upbeat-ptolemy-su53h

  function App() {
    const [carbrand, setCarBrand] = useState();
    let cars = ["honda", "toyota", "bmw"];
    let eachCarName = cars.map(name => {
      console.log("name--->", name);
      let carDiv = <div>{name}</div>;
      return carDiv;

      //return name;
    });

    console.log("eachCarName--->", eachCarName);
    const eachCarClick = e => {
      console.log("eachCarClick--->", e);
      console.log("eachCarClick e.target.innerText--->", e.target.innerText);
    };

    // const setCarBrand = eachCarName;
    // const carbrand = eachCarName;

    return (
      <div className="App">
        <h1 onClick={eachCarClick(event)}>{eachCarName}</h1>
      </div>

【问题讨论】:

  • 只是&lt;h1 onClick={eachCarClick}&gt;{eachCarName}&lt;/h1&gt; ....不要在html中调用eachCarClick函数,而是将其定义为事件处理程序。然后在单击时调用该事件作为函数的第一个参数自动插入

标签: javascript html css reactjs redux


【解决方案1】:

我觉得你的 onClick 有问题,这里是我的示例代码

代码沙盒:https://codesandbox.io/s/elated-field-3wj2x

代码:

import React, { useState } from "react";
import ReactDOM from "react-dom";

import "./styles.css";

function App() {
  const [carbrand, setCarBrand] = useState();
  let cars = ["honda", "toyota", "bmw"];
  let eachCarName = cars.map((name, index) => {
    return (
      <h1 onClick={e => eachCarClick(e)} key={index}>
        {name}
      </h1>
    );
  });

  const eachCarClick = e => {
    setCarBrand(e.target.innerText);
  };

  // const setCarBrand = eachCarName;
  console.log(carbrand);

  return (
    <div className="App">
      <div>{eachCarName}</div>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

【讨论】:

  • 嘿,我在控制台中看到了这些值,但是如何在浏览器中显示这些值,而不是在 h1 中传递点击,我们可以传入外部 div,这是最好的方法,在此处提供我的更新代码以及为什么你在onclick onClick={e =&gt; eachCarClick(e)}之前通过e,你能解释一下它会帮助我理解codesandbox.io/s/upbeat-ptolemy-su53h
【解决方案2】:

这里的代码将为你完成这项工作

import React, { useState } from "react";
import ReactDOM from "react-dom";

import "./styles.css";

function App() {
  const [carbrand, setCarBrand] = useState();
  let cars = ["honda", "toyota", "bmw"];
  let eachCarName = cars.map(name => {
    console.log("name--->", name);
    let carDiv = <div>{name}</div>;
    return carDiv;

    //return name;
  });

  console.log("eachCarName--->", eachCarName);
  const eachCarClick = e => {
    console.log("eachCarClick--->", e);
    console.log("eachCarClick e.target.innerText--->", e.target.innerText);
  };

  // const setCarBrand = eachCarName;
  // const carbrand = eachCarName;

  return (
    <div className="App">
      <h1 onClick={eachCarClick}>{eachCarName}</h1>
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

这是一个代码框,可以满足您的需求https://codesandbox.io/s/polished-cloud-fwj6h

【讨论】:

【解决方案3】:

这里有一些问题,但功能上最大的问题是没有 innerText 属性 - e.target 将返回 HTML 元素,您需要获取 valueid 或任何您需要的属性其中。在下面的示例中,我将其称为 ID

代码沙盒:https://codesandbox.io/embed/spring-mountain-1v8873222-wpl0d

代码:

function App() {
  const [carbrand, setCarBrand] = useState('');
  let cars = ["honda", "toyota", "bmw"];

  return (
    <div className="App">
      {cars.map(carName => <h1 id={carName} onClick={e => setCarBrand(e.target.id)}>{carName}</h1>)}
      {carbrand && <p>you clicked: {carbrand}</p>}
    </div>
  );
}```

I opted for doing the mapping inline for simplicity.  There's no real issue either way but stylistically, for something so simple this would be my preference.

【讨论】:

  • 嘿,当我单击警报中未定义的每个值时,你能告诉我如何在浏览器中显示这些值
  • 我忘了分叉沙箱 - 我将编辑上面的内容。如果这对您有帮助,请点赞或标记为正确。谢谢!
  • 点击后您将在浏览器中看到该值 - 即 `{carbrand &&

    you clicked: {carbrand}

    }
  • 嘿,假设我有一万辆汽车,给每辆汽车或外部 div 附加一个事件处理程序好不好,你能告诉我好的方法和如何实现,因为现在我们正在附加每辆车
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2018-01-25
  • 2018-10-13
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
相关资源
最近更新 更多