javascript - 为什么 array.findIndex 返回的不是函数。(Mozilla说它基本上是?)
问题描述
更改state.findIndex
以state.ids.findIndex
解决此问题。
但是,当调用该函数时,onClick
它会自动将所有active
值更新为true
. 而不是等待点击事件。
我正在尝试设置一个onClick
方法/函数,它将找到active: true
并将其设置为false
,然后找到匹配的对象id: xxxxxx
并将该对象设置active:
为true
。
根据 developer.mozilla.org 和其他几个站点的说法,我的方法理论上应该有效,或者更可能是我误解了它。
这是我正在尝试编写的函数 - 为什么它返回 findindex 不是函数?
function changeActiveField(im) {
const i = state.findIndex((obj) => obj.active === true);
state[i].active = false;
const index = state.findIndex((obj) => obj.id === im);
state[index].active = true;
}
在这里const i
找到的索引obj{ active: true}
并将其更改为obj{ active: false}
然后const index
找到obj
与从单击的组件传入的obj{id: value}
匹配的...im
<div className="thumbs">
{state.ids.map((i) => (
<Image
className="carouselitem"
rounded
fluid
onClick={changeActiveField(i.id)}
src={"http://img.youtube.com/vi/" + i.id + "/hqdefault.jpg"}
size="small"
/>
))}
</div>
转到https://test.ghostrez.net并导航到“服务”页面以查看视频菜单。小缩略图是应该触发changeActiveField
功能的“可点击”项目,依次设置点击和id
更改divactive: true
activevid
这是完整的页面代码。
import React from "react";
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
import { Embed, Image, Loader } from "semantic-ui-react";
import "./Player.css";
var state = {
ids: [
{
id: "iCBvfW08jlo",
active: true,
},
{
id: "qvOcCQXZVg0",
active: false,
},
{
id: "YXNC3GKmjgk",
active: false,
},
],
};
function firstActiveId(ids) {
for (var i = 0; i < ids.length; i++) {
if (ids[i].active) {
return ids[i].id;
}
}
}
function changeActiveField(im) {
const i = state.findIndex((obj) => obj.active === true);
state[i].active = false;
const index = state.findIndex((obj) => obj.id === im);
state[index].active = true;
}
export default class Player extends React.Component {
constructor(props) {
super(props);
this.state = {
state: false,
};
}
render() {
return (
<div className="carouselwrap">
<div className="activevid">
<Embed
active
autoplay={false}
color="white"
hd={false}
id={firstActiveId(state.ids)}
iframe={{
allowFullScreen: true,
style: {
padding: 10,
},
}}
placeholder={
"http://img.youtube.com/vi/" +
firstActiveId(state.ids) +
"/hqdefault.jpg"
}
source="youtube"
/>
</div>
<div className="thumbs">
{state.ids.map((i) => (
<>
<Image
className="carouselitem"
rounded
fluid
onClick={changeActiveField(i.id)}
src={"http://img.youtube.com/vi/" + i.id + "/hqdefault.jpg"}
size="small"
/>
<h2>
{/*this is for testing purposes only*/}
{i.id} {i.active ? "true" : "false"}
</h2>
</>
))}
</div>
</div>
);
}
}
解决方案
问题是状态不是数组,而是数组中的 ids ......所以改变我的陈述来state.ids.findIndex
解决这个问题
function changeActiveField(im) {
const i = state.findIndex((obj) => obj.active === true);
state[i].active = false;
const index = state.findIndex((obj) => obj.id === im);
state[index].active = true;
}
推荐阅读
- laravel - 如何在 json forman 中获取验证错误?(Laravel,获取)
- javascript - jQuery 未从移动设备上的 CDN 加载
- machine-learning - 衡量机器学习模型的偏差
- microsoft-graph-api - 将自定义标头添加到订阅 microsoft graph api
- reactjs - highchart(stockchart)滚动条中的堆积列
- hive - 如何在维度模型中对多值属性进行建模
- model-view-controller - 将 asp.net Core mvc Web 应用程序降级为 .net framework.so 现在我需要在代码中进行哪些更改
- python - Mongoengine:匹配重音字符作为基础字符
- android - 支持 WebP 图像的最低 Android 操作系统版本
- vuejs2 - 我的 Twig 文件中的 Vue 模态组件的转换不起作用