gpt4 book ai didi

javascript - Prop 未动态更新

转载 作者:行者123 更新时间:2023-12-02 21:08:33 25 4
gpt4 key购买 nike

当单击单选按钮(在 Test.js 中编码的一组按钮)时,将执行一个名为 handleclick 的函数。在此我更新了数组,但是我无法将其重新发送到 graph_test.js。因此 graph_test.js 接收到填充有 0 的初始数组,但它从未接收到更新的版本。
我想要的是一个由 0 和 1 组成的数组,每个索引代表一个区域。单击按钮时,0/1 会变成相反的值。
我需要像 graph_test.s 中那样动态更新,我将根据数组中的索引旁边有 1 来对图表上的行进行编码。Test.js - 我在其中填充、创建、更新数组

// When radio buttons checked, change corresponding value in array if 0 change to 1 and if 1 change to 0
// This will be used in the graph component, and will enable the functionality of selcting one region or multiple region.
// As the graph will be plotted based on which regions are noted 1 in the array


import $ from "jquery";
import Graph_Test from "./Graph_Test.js";
import React, { useState } from "react";
const Test = props => {
const total_regions = (JSON.parse(JSON.stringify(props.test)).length); // gets the number of regions
const [array, setArray] = useState(Array(total_regions.length).fill(0));
//when a radio button is clicked change its corresponding in the array

//when a radio button is clicked change its corresponding in the array
const handleClick = (item, idx) => {
if (array[idx] == 1) {
array[idx] = 0;
} else {
array[idx] = 1;
}
setArray(array);
};


return (
// displays radio buttons depending on the number of objects in json
<div>
<div>
<Graph_Test array={array} testing={[]} />
</div>
<div>
{props.test.map((item, idx) => {
return (
<label key={idx}>
<input className="region" type="radio" value={idx} onClick={() => handleClick(item, idx)}/>
<span>{idx}</span>
</label>
);
})}
</div>

</div>
);
};
export default Test;

Graph_test 数组被调用的位置:

import React from 'react';
import $ from "jquery";
//<h1>{props.testing.map}</h1>
const Graph_Test = props => {
console.log(`ARRRAy ${props.array.length}`);
return(
<div>
<div>
{props.array && props.array.length > 0 && <p>{props.array[0]}</p> }
</div>
<div>
{props.testing && props.testing.map((item, idx) => {
return (
<label key={idx}>
<input className="region" type="radio" value={idx} />
<span>{idx}</span>
</label>
);
})}
</div>
</div >
);
};export default Graph_Test;

app.js:

import "bootstrap/dist/css/bootstrap.css";
import React from "react";
import ReactPlayer from 'react-player'
import LeftPane from "./components/LeftPane.js";
import Video from "./components/Video.js";
//import Footer from "./components/Footer.js";
import Test from "./components/Test.js";
import Graph_Test from "./components/Graph_Test.js";
//import './App.css';

class App extends React.Component {
constructor(props) {
super(props);
this.state = { apiResponse: [] };

}
// Comunicate with API
callAPI() {
fetch("http://localhost:9000/IntensityAPI") //React app talks to API at this url
.then(res => res.json())
.then(res => this.setState({ apiResponse: res }));
}
componentWillMount() {
this.callAPI();
}

render() {
return (
<div className="App">
<div class="row fixed-top fixed-bottom no-gutters" >
<div class="col-3 fixed-top fixed-bottom">
<LeftPane></LeftPane>
</div>
<div class="offset-md-3 fixed-top fixed-bottom" >
<Video></Video>
</div>
<div class=" col-3 fixed-bottom">
<Test test = {this.state.apiResponse}/>
<Graph_Test testing = {this.state.apiResponse} array={[]} />

</div>
</div>

</div>
);
}
}
export default App;
// <Footer test = {this.state.apiResponse}/>

我生成了一个沙箱。你可以看到 0,所以当按下单选按钮时,我希望它变成 0,然后当再次按下它时,我希望它变回 1。这是通过状态完成的吗?也忽略第一行单选按钮,只是将其放在那里用于测试目的,它应该起作用的下一行 https://codesandbox.io/s/arraypropproblem-8ec6d?file=/src/components/Test.js

最佳答案

您的codesandbox返回一个获取错误,但是是的,您是对的:通过实现在两个组件之间使用的一般状态,handleClick更新也将正确反射(reflect)在graph_test

如果它们是同级组件,则将状态提升到父组件,这样就可以了。示例:

class Example extends Component {
constructor(props) {
super(props);
this.state = {
isClicked: false
};
}

handleClick = () => {
this.setState({ ...this.state, isClicked: !this.state.isClicked });
};

render() {
return (
<div>
<button onClick={this.handleClick}>Click</button>
</div>
);
}
}

export default Example;

并将此状态传递给您想要在其中使用它的任何其他子组件

关于javascript - Prop 未动态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61160002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com