使用 onClick 调用相同的函数适用于一件事而不是另一件事?

莎拉

我正在创建一个应用程序,用户可以在其中搜索带有搜索栏的设备,或浏览嵌套菜单。当用户找到他们想要的设备时,他们点击绿色加号将其添加到他们的“包”中。出于某种原因,addDevice我编写函数仅适用于搜索功能,而不适用于在菜单中调用时。它似乎部分工作,但不正确。有谁知道我的代码中的什么可能导致这种情况?请参阅下面的图片了解更多详情。

我还进行了两种不同的 API 调用,一种用于搜索栏(在其自己的函数中调用),另一种用于菜单(在 中调用componentDidMount)。这可能是导致错误的原因吗?

我不会包括每一行代码,因为它很多,但是如果您想查看其他代码,请告诉我。

class App extends React.Component {
  state = {
    devices: [],
    bag: [],
    objectKeys: null,
    tempKeys: []
  };

这是由 onClick 调用的函数

addDevice = (e, deviceTitle) => {
    const array = Array.from(this.state.bag || []);
    if (array.indexOf(deviceTitle) === -1) {
      array.push(deviceTitle);
    } else {
      return;
    }
    localStorage.setItem("list", JSON.stringify(array));
    this.setState({
      bag: array
    });
  };

这是调用 addDevice 时似乎不起作用的函数

makeMenuLayer = layer => {
    const { objectKeys } = this.state;
    if (layer == null) {
      return null;
    }
    const layerKeys = Object.entries(layer).map(([key, value]) => {
{/*If value has children, display an arrow, if not, do nothing*/}      
var arrow = Object.keys(value).length ? (
        <i
          className="fas fa-angle-right"
          style={{ cursor: "pointer", color: "gray" }}
        />
      ) : (
        ""
      );
{/*If value has no children, display an plus sign, if not, do nothing*/}
      var plus =
        Object.keys(value).length === 0 ? (
          <i
            className="fas fa-plus"
            style={{ cursor: "pointer", color: "green" }}
            onClick={e => this.addDevice(e, this.value)}
          />
        ) : (
          ""
        );
      return (
        <ul key={key}>
          <div onClick={() => this.handleShowMore(key)}>
            {key} {arrow} {plus}
          </div>

          {objectKeys[key] && this.makeMenuLayer(value)}
        </ul>
      );
    });
    return <div>{layerKeys}</div>;
  };

这是调用执行工作的 addDevice 的地方

render () {
   return(
            <div className="search-results">
              {(this.state.devices || []).map(device => (
                <a key={device.title}>
                  <li>
                    {device.title}{" "}
                    <i
                      className="fas fa-plus plus input"
                      style={{ cursor: "pointer", color: "green" }}
                      onClick={e => this.addDevice(e, device.title)}
                    />
                  </li>
                </a>
              ))}
            </div>
)}

这是从搜索中添加设备时的样子(工作正常) 在此处输入图片说明

当我尝试从菜单中添加“领带”时会发生这种情况。之后它不允许我添加任何其他内容

在此处输入图片说明

马哈茂德·阿特瓦

在这一行中onClick={e => this.addDevice(e, this.value)}的值this指向类本身。因此,this.valueis undefined,它不允许您添加更多内容,因为undefined它已经在数组中并且undefined === undefined实际上是真的。要解决此问题,您需要传递设备标题的正确值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用joi进行条件验证:如果属性值大于4,则执行一件事,否则执行另一件事

来自分类Dev

使用FROM子句而不是JOIN子句联接表是同一件事吗?

来自分类Dev

使用env和export是同一件事吗?

来自分类Dev

可以使用ADD和LDUR完成同一件事吗?

来自分类Dev

如何使用流对不在索引范围内的元素做一件事而对是在范围内的元素做另一件事?

来自分类Dev

使用jQuery检查某个元素是否是另一个元素中的第一件事

来自分类Dev

当他们似乎做同一件事时,为什么还要在Jest中使用Enzyme?

来自分类Dev

制作只做一件事的函数

来自分类Dev

为什么javascript返回另一件事,而php又返回另一件事?

来自分类Dev

在iPad上显示一件事,在Apple TV上显示另一件事?

来自分类Dev

JLabel将文本从一件事更改为另一件事

来自分类Dev

如何选择一件事,如果条件为假,则选择另一件事

来自分类Dev

“哪个”报告一件事,实际命令是另一件事

来自分类Dev

Windows用户只是一件事

来自分类Dev

CSS选择器允许一件事,但不允许另一件事?

来自分类Dev

尝试在我的JavaScript代码中理解“ this”(一件事有效,另一件事无效)

来自分类Dev

显示器分辨率说一件事,但显示另一件事

来自分类Dev

如何打开一件事然后又打开另一件事

来自分类Dev

在正则表达式中,捕获一件事,或另一件事,或两者兼而有之

来自分类Dev

部分模板专业化可能不适用于函数,但是是否不重载同一件事?

来自分类Dev

不同目录中的相同名称是同一件事吗?

来自分类Dev

快速排序算法-做同一件事的方法有很多?

来自分类Dev

const和constexpr最终会是同一件事吗?

来自分类Dev

“ var”和“ variant”是同一件事吗?

来自分类Dev

首先在HashMap中获得第一件事?

来自分类Dev

延续单子和命令式单子在谈论同一件事吗?

来自分类Dev

在AssertJ中测试一件事是否成立

来自分类Dev

让课堂专注于做一件事-实际上

来自分类Dev

如何选择数组中的最后一件事?

Related 相关文章

  1. 1

    使用joi进行条件验证:如果属性值大于4,则执行一件事,否则执行另一件事

  2. 2

    使用FROM子句而不是JOIN子句联接表是同一件事吗?

  3. 3

    使用env和export是同一件事吗?

  4. 4

    可以使用ADD和LDUR完成同一件事吗?

  5. 5

    如何使用流对不在索引范围内的元素做一件事而对是在范围内的元素做另一件事?

  6. 6

    使用jQuery检查某个元素是否是另一个元素中的第一件事

  7. 7

    当他们似乎做同一件事时,为什么还要在Jest中使用Enzyme?

  8. 8

    制作只做一件事的函数

  9. 9

    为什么javascript返回另一件事,而php又返回另一件事?

  10. 10

    在iPad上显示一件事,在Apple TV上显示另一件事?

  11. 11

    JLabel将文本从一件事更改为另一件事

  12. 12

    如何选择一件事,如果条件为假,则选择另一件事

  13. 13

    “哪个”报告一件事,实际命令是另一件事

  14. 14

    Windows用户只是一件事

  15. 15

    CSS选择器允许一件事,但不允许另一件事?

  16. 16

    尝试在我的JavaScript代码中理解“ this”(一件事有效,另一件事无效)

  17. 17

    显示器分辨率说一件事,但显示另一件事

  18. 18

    如何打开一件事然后又打开另一件事

  19. 19

    在正则表达式中,捕获一件事,或另一件事,或两者兼而有之

  20. 20

    部分模板专业化可能不适用于函数,但是是否不重载同一件事?

  21. 21

    不同目录中的相同名称是同一件事吗?

  22. 22

    快速排序算法-做同一件事的方法有很多?

  23. 23

    const和constexpr最终会是同一件事吗?

  24. 24

    “ var”和“ variant”是同一件事吗?

  25. 25

    首先在HashMap中获得第一件事?

  26. 26

    延续单子和命令式单子在谈论同一件事吗?

  27. 27

    在AssertJ中测试一件事是否成立

  28. 28

    让课堂专注于做一件事-实际上

  29. 29

    如何选择数组中的最后一件事?

热门标签

归档