Reactjs 如何将动态id从数组传递到组件内部的属性-React
Reactjs 如何将动态id从数组传递到组件内部的属性-React,reactjs,react-router,Reactjs,React Router,我正在做一个名为“智能房子”的小项目。我有一个表单,可以生成带有颜色、名称和类型的房间。 我的问题是,我找不到一种方法在组件动态id中插入与我单击的房间匹配的属性索引 My App.js: 现在,属性index={0},因为我不知道如何在那里设置当前id class App extends Component { state ={ rooms:[] } addRoom = (id,type,name,color) =>{ this.setState({room
我正在做一个名为“智能房子”的小项目。我有一个表单,可以生成带有
颜色、名称和类型的房间。
我的问题是,我找不到一种方法在
组件动态id中插入与我单击的房间匹配的属性索引
My App.js:
现在,属性index={0}
,因为我不知道如何在那里设置当前id
class App extends Component {
state ={
rooms:[]
}
addRoom = (id,type,name,color) =>{
this.setState({rooms:[{id:id,type:type, name:name, color:color, devices:[]}, ...this.state.rooms]});
}
render(){
return (
<div className="App">
<Title title="Smart House" />
<Router>
<Switch>
<Route exact path="/" component={() => {return <HomePage rooms={this.state.rooms.map((item,i) => {
return <Link to={`/room/${item.name}`}><ArchiveRoom color={item.color} name={item.name} index={i} /></Link>
})} />}} />
<Route path="/addroom" component={() => {return <AddRoom add={this.addRoom} />}} />
<Route path={`/room/:id`} component={() => {
return <SingleRoom room={this.state.rooms} index={0} />
}} />
</Switch>
</Router>
</div>
)
}
}
类应用程序扩展组件{
陈述={
房间:[]
}
addRoom=(id、类型、名称、颜色)=>{
this.setState({rooms:[{id:id,type:type,name:name,color:color,devices:[]},…this.state.rooms]});
}
render(){
返回(
{返回{
返回
})} />}} />
{return}}/>
{
返回
}} />
)
}
}
my SingleRoom.js组件
export default class SingleRoom extends Component {
constructor(props){
super(props)
this.state = {
index: props.index,
name: this.props.name,
type: this.props.type
}
}
getIndex = () =>{
this.props.index(this.state.index)
}
render() {
return (
<div className="single-room">
<Link to="/"><div className="add-room homepage-button"><button>⬅</button></div></Link>
<h4>Room name: {this.props.room[this.state.index].name}</h4>
<h4>Room type: {this.props.room[this.state.index].type}</h4>
<button className="add-room-button">Add Device</button>
</div>
)
}
}
导出默认类SingleRoom扩展组件{
建造师(道具){
超级(道具)
此.state={
索引:props.index,
名称:this.props.name,
类型:this.props.type
}
}
getIndex=()=>{
this.props.index(this.state.index)
}
render(){
返回(
⬅
文件室名称:{this.props.Room[this.state.index].name}
房间类型:{this.props.Room[this.state.index].type}
添加设备
)
}
}
ArchiveRoom.js组件:
export default class ArchiveRoom extends Component {
constructor(props){
super(props)
this.state = {
index: props.index
}
}
getIndex = () => {
this.props.index(this.state.index);
}
render() {
return (
<div onClick={this.props.singleRoom} style={{backgroundColor:this.props.color, cursor:"pointer"}} className="archive-room">
<h3>{this.props.name}</h3>
</div>
)
}
}
导出默认类ArchiveRoom扩展组件{
建造师(道具){
超级(道具)
此.state={
索引:props.index
}
}
getIndex=()=>{
this.props.index(this.state.index);
}
render(){
返回(
{this.props.name}
)
}
}
非常感谢帮助者:{
<Route path={`/room/:id`} component={props => {
return <SingleRoom room={this.state.rooms} {...props} />
}} />
返回
}} />
您可以通过SingleRoom
组件中的this.props.match.params.id
访问id,请参见。
export default class SingleRoom extends Component {
constructor(props){
super(props)
this.state = {
index: props.index,
name: this.props.name,
type: this.props.type
}
}
getIndex = () =>{
this.props.index(this.state.index)
}
render() {
return (
<div className="single-room">
<Link to="/"><div className="add-room homepage-button"><button>⬅</button></div></Link>
<h4>Room name: {this.props.room[this.state.index].name}</h4>
<h4>Room type: {this.props.room[this.state.index].type}</h4>
<button className="add-room-button">Add Device</button>
</div>
)
}
}