我有两个名为“ products”和“ admin”的数组。在AddInfo函数中,我分别使用s&j等于product和admin。现在,在push语句上方的console.log
语句中,控制台中数组的长度是相等的,在push语句之后,数组的长度也相等,即使产品的push语句已被注释掉。
取消注释s的push语句(即this.state.products)时,该产品在屏幕上显示2次,但是,该产品仅在数据库中添加一次,并且在刷新时自动删除其中一个副本,这很奇怪
AddInfo(info){
let s = this.state.products;
let j = this.state.admin;
let obj ={name:info.productName};
axios.post('http://localhost:5000/admin',obj).then((res)=>{
if (info.productName !== "") {
console.log(this.state.products);
console.log(this.state.admin);
// s.push(res.data);
j.push(res.data);
console.log(this.state.products);
console.log(this.state.admin);
this.setState({
products:s,
admin:j
})
} else {
alert("Please fill all the fields.")
}
console.log("Products",this.state.products,res.data);
});
};
答案 0 :(得分:1)
您以错误的方式设置了状态。您应该在回调函数中设置状态。
WebDriverWait wait = new WebDriverWait(driver, 10);
List<WebElement> list = driver.findElements(By.xpath("//div[contains(@class,'menuRoot')]//ul//li//a"));
System.out.println(list.size());
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).getText());
if(list.get(i).getText().equals("Workflow")) {
//driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
wait.until(
ExpectedConditions.visibilityOfElementLocated(By.xpath("/html/body/div[1]/ul/li[5]/a"))
);
list.get(i).click();
break;
}
}
答案 1 :(得分:0)
setState
。通过进行j.push(res.data);
,您基本上就在进行this.state.admin.push(res.data)
,因为变量分配在Javascript上起作用。
因此,您正在更改状态,您应该直接绝对不要进行更改,因为在this.state.admin数组中推送新项不会替换基础数组。
好读的书:https://medium.com/pro-react/a-brief-talk-about-immutability-and-react-s-helpers-70919ab8ae7c