Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多次运行的Math.random()_Javascript_Reactjs - Fatal编程技术网

Javascript 多次运行的Math.random()

Javascript 多次运行的Math.random(),javascript,reactjs,Javascript,Reactjs,我正在制作一个随机图像生成器,它需要显示14个随机图像。 这是可行的,但是这14张随机图像在一次通话中被其他图像替换了3次 我不想发生这种事,但我不知道该如何阻止。我认为math.random()导致了这个问题,但我不确定。我正在React.JS上运行此脚本 我的代码: for (var g=0; g < 14; g++) { var rdmNumber = Math.floor(Math.random() * 14) + 1; var imgName = "img_" +

我正在制作一个随机图像生成器,它需要显示14个随机图像。 这是可行的,但是这14张随机图像在一次通话中被其他图像替换了3次

我不想发生这种事,但我不知道该如何阻止。我认为math.random()导致了这个问题,但我不确定。我正在React.JS上运行此脚本

我的代码:

for (var g=0; g < 14; g++) {
    var rdmNumber = Math.floor(Math.random() * 14) + 1;
    var imgName = "img_" + rdmNumber +".png";
    var src = "img" + "/" + imgName;
    indents.push(<div className="item-picture" key={c}><img src= {src8}className="item-img" alt="Your possible winnings" /></div>);
}
.gif根据正在发生的情况:

提前谢谢

编辑
我不需要唯一的图像,我只希望它们保持不变,而不是像在.gif中看到的那样替换。您需要的是在渲染之外创建一次随机图像数组,然后渲染它

在组件外部或构造函数中执行此操作

// outside of your component
let images = []
for (var g=0; g < 14; g++) {
    var rdmNumber = Math.floor(Math.random() * 14) + 1;
    var imgName = "img_" + rdmNumber +".png";
    var src = "img" + "/" + imgName;
    images.push(src);
}

// in your component's render method
images.forEach(url => 
    indents.push(<div className="item-picture" key={url}>
        <img src= {url}className="item-img" alt="Your possible winnings"/>
    </div>)
)

// and you can render {indents} somewhere after that
//组件外部
让图像=[]
对于(var g=0;g<14;g++){
var rdmNumber=Math.floor(Math.random()*14)+1;
var imgName=“img_”+rdmNumber+”.png”;
var src=“img”+“/”+imgName;
图像推送(src);
}
//在组件的渲染方法中
images.forEach(url=>
压入(
)
)
//你可以在之后的某个地方渲染{indents}

您可能已经在渲染函数中编写了此代码,该函数将在每次发生更改时运行


尝试用componentWillMount编写此代码。

我认为此代码不足以帮助您。您可以显示更多相关代码吗?
Math.floor(Math.random()*14)+1
是否可以多次返回相同的值,即使您多次执行它?例如,随机序列可能是
4 1 7 3 6 3 8 12 9
,如您所见,它已将您的一张图像“替换”为图像3。您是否尝试过创建一个从1到14的数组,然后在不替换的情况下从该数组中随机采样?这可能是你想要的。或者你可以创建一个1到14的数组,将其洗牌,然后正常地迭代,这样就可以通过洗牌来模拟随机性。我只有这些了@G@gaetanoM我不需要独特的图像,我只希望它们保持不变,而不是像图中所示的那样替换。我该如何实现这一点?我是个新手。我忘了提到{indents}部分有多重要。当我调用多个函数时,它们的名称都需要是唯一的。我是否需要在let images数组中输入0->14?如果您能再多解释一下这段代码是如何工作的,我们将不胜感激:-)。另一个答案建议使用componentWillMount,而不是componentWillUnmount这也给了我以下错误:第99行:“映射”未定义没有未定义第99行:“缩进”未定义没有未定义我只是注意到,我也创建了一个新的componentWillMount(因为不存在)它仍然给了我上面提到的错误:(我试过了,但是当我这么做的时候,它说,{indents}是未定义的。
// outside of your component
let images = []
for (var g=0; g < 14; g++) {
    var rdmNumber = Math.floor(Math.random() * 14) + 1;
    var imgName = "img_" + rdmNumber +".png";
    var src = "img" + "/" + imgName;
    images.push(src);
}

// in your component's render method
images.forEach(url => 
    indents.push(<div className="item-picture" key={url}>
        <img src= {url}className="item-img" alt="Your possible winnings"/>
    </div>)
)

// and you can render {indents} somewhere after that