Javascript 如何使用React.js将2D数组传递到array.prototype.map()中
以下2D数组Javascript 如何使用React.js将2D数组传递到array.prototype.map()中,javascript,reactjs,Javascript,Reactjs,以下2D数组timeArray处于React中父组件的状态。我在render()函数中使用它,如下所示: render() { return ( <div><Manager data={this.state.timeArray} /></div> ); } 当我将weekData传递到Week时,我希望它是一个数组,因为来自父组件的timeArray是一个2D数组。但是,当我在Week的render()函数中使用console.log(thi
timeArray
处于React中父组件的状态。我在render()
函数中使用它,如下所示:
render() {
return (
<div><Manager data={this.state.timeArray} /></div>
);
}
当我将weekData
传递到Week
时,我希望它是一个数组,因为来自父组件的timeArray
是一个2D数组。但是,当我在Week
的render()
函数中使用console.log(this.props.weekData)
时,我得到的是未定义的
,而不是数组中的实际数据。通过这个考试的最好方法是什么
编辑:每个请求,以下是大部分来源:
应用程序
// preceded by various imports
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
timeArray = []
}
}
handleNewClick() {
let tempWeek = this.getInput();
let tempArr = this.state.timeArray.slice(0);
console.log(tempArr); // logs []
tempArr.push(tempWeek);
console.log(tempArr); // logs [1, 1, 1, 1]
this.setState({ timeArray: tempArr });
}
getInput() { // unimplemented, returning expected values for testing
return [1, 1, 1, 1]
}
render() {
return (
<div>
<Manager weeksData={this.state.timeArray} />
<button onClick={this.handleNewClick.bind(this)}>
Add Week
</button
</div>
);
}
}
export default App;
在您尚未发布的代码中,您如何配置
timeArray
变量时出错。这对我来说很好
class ManagerContainer extends React.Component {
constructor(props) {
super(props);
this.state = { timeArray: [
{id: 1}, {id: 2}, {id: 3}
]}
}
render() {
return (
<div><Manager data={this.state.timeArray} /></div>
);
}
}
class Manager extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
{this.props.data.map((week, i) => (
<Week key={i} weekData={week} />
))}
</div>
);
}
}
class Week extends React.Component {
render() {
return (
<p>week number: {this.props.weekData.id}</p>
)
}
}
ReactDOM.render(<ManagerContainer />, document.getElementById('app'))
类管理器容器扩展React.Component{
建造师(道具){
超级(道具);
this.state={timeArray:[
{id:1},{id:2},{id:3}
]}
}
render(){
返回(
);
}
}
类管理器扩展了React.Component{
建造师(道具){
超级(道具);
}
render(){
返回(
{this.props.data.map((周,i)=>(
))}
);
}
}
类组件{
render(){
返回(
周数:{this.props.weekData.id}
)
}
}
ReactDOM.render(,document.getElementById('app'))
首先,您的代码中有很多拼写错误,我已经在下面的解决方案中修复了它们 所以这里的主要问题是,您试图访问不存在的道具。当您将
数据
传递给周组件(数据={weekId}
)时,道具数据
将存在于周组件中,而非周组件
属性。因此,如果您访问this.props.data
而不是this.props.weekId
您将获得您的数据
//前面有各种导入
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
时间数组:[]
};
}
handleNewClick(){
让tempWeek=this.getInput();
设tempArr=this.state.timeArray.slice(0);
console.log(tempArr);//logs[]
临时推送(临时周);
console.log(tempArr);//日志[1,1,1,1]
this.setState({timeArray:tempArr});
}
getInput(){//未实现,返回测试的预期值
返回[1,1,1,1]
}
render(){
返回(
增加一周
);
}
}
//各种进口
类管理器扩展了React.Component{
render(){
返回(
{this.props.weeksData.map((weekId,i)=>(
))}
);
}
}
//各种进口
类组件{
render(){
让weekData=this.props.weekId;
console.log(weekData);//未定义日志,这与预期不符
console.log(this.props.data);//按预期记录数据
返回未实现的组件;
}
}
ReactDOM.render(,document.getElementById('app'))
对于这个基本问题,我很抱歉,我仍在学习如何使用ReactJS。我无法重现您的问题。你能发布剩下的代码吗?你能添加初始化timeArray
的代码吗?@D-reaper完成,请参阅最新的编辑timeArray
的每个元素是否需要id
?初始化为timeArray:[]代码>在我的构造函数中,但是我使用let temp=[0,1,0]
,let arr=this.state.timeArray.slice(0)
arr.push(temp)
,然后this.setState({timeArray:arr})
,因此timeArray
是一个数组数组,但每个元素都没有id
。我无法在Week
组件中将它们引用为this.props.weekData.id
的。如果不清楚,我可以添加到问题中,因为我认为这不会影响到错误,只要您正确处理数据,有关它的详细信息就不应该很重要。我发布的代码运行方式与我认为您所期望的一样。将你的代码与之进行比较,并开始修改它,直到你觉得有意义为止。哇,这是一个非常简单的错误,谢谢你的帮助。我为自己是个新手而道歉,并不是想把它变成一个扩展调试会话。
//various imports
class Manager extends React.Component {
render() {
console.log(this.props.weeksData);
// ^^ logs [1,1,1,1] for each button press, e.g.
// 1 button press: [[1,1,1,1]]
// 2 button presses: [[1,1,1,1],[1,1,1,1]] and so on
return (
<div>
{this.props.weeksData.map((weekId, i) => (
<Week key={i} data={weekId} />
))}
</div>
);
}
}
export default Manager;
// various imports
class Week extends React.Components {
render() {
let weekData = this.props.weekId;
console.log(weekData); // logs undefined, which is not as expected
render() { // unimplemented
return <div></div>;
}
}
}
export default Week;
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
class Container extends React.Components {
render() {
return (
<div>
<App />
</div>
);
}
}
ReactDOM.render(
<Container />,
document.getElementById('react')
);
class ManagerContainer extends React.Component {
constructor(props) {
super(props);
this.state = { timeArray: [
{id: 1}, {id: 2}, {id: 3}
]}
}
render() {
return (
<div><Manager data={this.state.timeArray} /></div>
);
}
}
class Manager extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
{this.props.data.map((week, i) => (
<Week key={i} weekData={week} />
))}
</div>
);
}
}
class Week extends React.Component {
render() {
return (
<p>week number: {this.props.weekData.id}</p>
)
}
}
ReactDOM.render(<ManagerContainer />, document.getElementById('app'))