I have the following 2D array timeArray in the state of my parent component in React. I am using it in the render() function as per follows:
render() {
return (
<div><Manager data={this.state.timeArray} /></div>
);
}
In my Manager component's render() function, I then use the following:
render() {
return (
<div>
{this.props.data.map((weekId, i) => (
<Week key={i} weekData={weekId} />
))}
</div>
);
}
I am expecting weekData when I pass it into Week to be an array, as timeArray from my parent component is a 2D array. However, when I use console.log(this.props.weekData) in Week's render() function, I get undefined, not the actual data from the array. What is the best way to pass this in?
EDIT: Per request, here's most of the source:
App
// 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;
Manager
//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;
Week
// 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;
All code is used and rendered in a Container component, which is:
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')
);
timeArray?