问题
The Terminal failed to compile. because create is not defined, I still learn using routers, it seems that the syntax or the locations wrong, I tried to understand how should I write it right in this project but there are too many details in my code already.
The goal is to show one page with a single button which open and display the form to create a room.
After the user finished fill out the details (at Addroom component) and clicked on the Create button I want to display the titles with the values that the user filled at the same page (in a styled box with the selected color by the user).
If I run handleShow and handleHide, It probably not detected, is it possible to use that boolean method when the routers exist? If so how? If not, it is enough that first of all the application will work with all the algorithms but with the routers defined of course (I don't have to use the boolean functions if there is another way).
Everything of those things worked good before I used the routers in the app.
I even didn't start use the routers here, I will, but I really need that the app will works first.
The description is long but it's important to me that you understand where the problem is.
I would love some help, excuse me for the mess in advance..
Here's an example of how it worked before: the project before using routers
Thanks!!
App.js
import React, { Component } from 'react'
import './App.css';
import Addroom from './components/Addroom.js';
import Room from './components/Room.js';
import {BrowserRouter as Router,Switch,Route,Link} from 'react-router-dom';
import 'bootstrap/dist/css/bootstrap.min.css';
function App() {
this.state = {
roomsList: [],
isActive: false
};
handleShow = () => {
this.setState({ isActive: true });
};
handleHide = () => {
this.setState({ isActive: false });
};
create = (r) => {
this.setState({
roomsList: [...this.state.roomsList, {r}],
isActive: false
});
};
return (
<div className="App">
<h1>My Smart House</h1>
<Router>
<div className="row">
<div className="col-6"><Link to='/room'>My Rooms</Link></div>
<div className="col-6"><Link to='/'>Create Room</Link></div>
<h1>My Smart House</h1>
{this.state.roomsList.map((element, key) => {
return (
<Room
id={key + 1}
key={key}
r={element.room}
rt={element.roomType}
ct={element.colorType}
sr={element.boxColor}
/>
);
})}
{this.state.isActive ? (
<Addroom add={this.create} />
) : (
<button onClick={this.handleShow}>Create</button>
)}
</div>
<Switch>
<Route exact path='/' component={()=>{return <Addroom/>}}/>
<Route exact path='/room' component={()=>{return <Room/>}}/>
</Switch>
</Router>
</div>
)
}
export default App;
Addroom.js
import React, { Component } from 'react'
import App from "../App";
export default class Addroom extends Component {
constructor(props) {
super(props)
this.state = {
roomNameInputColor: "white",
roomTypes: ["kitchen", "bathroom", "bedroom"],
roomSelected: "kitchen",
colorTypes: ["red", "green", "blue", "teal"],
colorSelected: "red"
};}
addRoomName = e => {
const room = e.target.value;
let roomNameInputColor = "white";
if (e.target.value.length >= 5) {
roomNameInputColor = "green";
} else {
roomNameInputColor = "red";
}
this.setState({ room, addRoomName: room, roomNameInputColor });
};
createRoom = () => {
this.props.add({
room: this.state.room,
roomType: this.state.roomSelected,
colorType: this.state.colorSelected,
boxColor: this.state.colorSelected
});
};
createRoomType = () => {
this.props.addRoomType(this.state.roomSelected);
};
createColorType = () => {
this.props.addColorType(this.state.colorSelected);
};
createBoxColor = () => {
this.props.colorTheBox(this.state.colorSelected);
};
setCategory = roomSel => {
this.setState({ roomSelected: roomSel });
};
setColorCategory = colorSel => {
this.setState({ colorSelected: colorSel });
};
render() {
return (
<div>
Addroom works!!
{/* //Select Room Type */}
<select onChange={e => this.setCategory(e.target.value)}>
{this.state.roomTypes.map((type, key) => (
<option key={key} value={type}>
{type}
</option>
))}
</select>
<br />
{/* //Select Room Color */}
<select onChange={e => this.setColorCategory(e.target.value)}>
{this.state.colorTypes.map((type, key) => (
<option key={key} value={type}>
{type}
</option>
))}
</select>
<br />
<input
onChange={this.addRoomName}
style={{ backgroundColor: this.state.roomNameInputColor }}
placeholder="Name Your Room"
/>
<br />
<button onClick={this.createRoom}>Create</button>
</div>
)
}
}
Room.js
import React, { Component } from "react";
export default class Room extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
const { id, r, rt, ct, sr } = this.props;
return (
<div className="Box" style={{backgroundColor: sr, height: "170px", width: "170px", margin: "30px"}}>
<h3>
Room {id}: {r}{" "}
</h3>
<h3>
Room Type {id}: {rt}
</h3>
<h3>
Room Color {id}: {ct}
</h3>
</div>
);
}
}
来源:https://stackoverflow.com/questions/63056498/terminal-failed-to-compile-using-react-routers-wrong-syntax-probably