Дочерний компонент с именем Edit получает props.match из маршрута ('/: id / edit'), но я не могу получить доступ к другим реквизитам в <Edit />
, отправленным из родительского компонента <Chirp />
.
Разве нельзя отправить реквизит обоими способами?
Моя первоначальная проблема состояла в том, что я хотел получить доступ к реквизиту из <Edit />
, не отображая все в Edit на странице Chirp.Поэтому я отправил реквизит по нажатию кнопки Edit.В противном случае <Edit />
прекрасно отображает все свои html.
console.log (this.props) показывает соответствие, местоположение и историю.Я пробовал this.props.match.params и this.props.user и т. Д., Но получаю только неопределенное значение.
Chirp.jsx (parent - также дочерний компонент)
import React, { Component, Fragment } from 'react';
import { BrowserRouter as Router, Link } from 'react-router-dom';
import 'isomorphic-fetch';
import Edit from './edit';
class Chirp extends Component {
constructor() {
super();
this.state = {
user: "",
text: ""
}
this.editClick = this.editClick.bind(this);
}
componentDidMount() {
fetch(`http://127.0.0.1:3000/api/chirps/${this.props.match.params.id}`)
.then(response => response.json())
.then(data => {
this.setState({
user: data.user,
text: data.text
})
})
.catch(err => console.log(err))
}
editClick() {
<Edit user={this.state.user} text={this.state.text} />
console.log("props passed")
}
render() {
return (
<div>
<Fragment>
<Link to="/" className="homelink" style={{ textDecoration: "none" }}>Home</Link>
</Fragment>
<div className="current">
<div className="flex-column">
<div className='chirps'>
<p>{this.state.user}: {this.state.text}</p>
<Fragment >
<Link to={`/${this.props.match.params.id}/edit`}><button onClick={this.editClick}>Edit</button></Link>
</Fragment>
<Fragment >
<Link to={`/${this.props.match.params.id}/delete`}><button className="delete">x</button></Link>
</Fragment>
</div>
</div>
</div>
</div>
)
}
}
export default Chirp;
edit.jsx (дочерний компонент)
import React, { Component, Fragment } from 'react';
import { BrowserRouter as Router, Link } from 'react-router-dom';
import 'isomorphic-fetch';
class Edit extends Component {
constructor() {
super();
this.state = {
newUser: "",
newText: ""
}
}
render() {
console.log(this.props)
return (
<div>
<Fragment>
<Link to="/" className="homelink" style={{ textDecoration: "none" }}>Home</Link>
</Fragment>
<h2>Edit Your Chirp</h2>
<div className="input">
<form action="">
<input
type="text"
placeholder={this.props.user}
size="10"
id="user"
name="user"
// onChange={this.inputHandler}
// defaultValue={this.props.user}
/>
<input
type="text"
placeholder={this.props.text}
size="60"
id="text"
name="text"
// onChange={this.inputHandler}
// defaultValue={this.state.text}
/>
<button
onClick={this.editChirps}
id="submit">
Submit
</button>
</form>
</div>
</div>
)
}
}
export default Edit;
app.jsx
import React, { Component, Fragment } from 'react';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';
import Home from './home'
import Chirp from './chirp'
import Edit from './edit'
import Delete from './delete'
class Navigation extends Component {
render() {
return (
<Router>
<Fragment>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/:id/edit" component={Edit} />
<Route path="/:id/delete" component={Delete} />
<Route path="/:id" component={Chirp} />
</Switch>
</Fragment>
</Router>
)
}
}
export default Navigation;