#javascript #reactjs
#javascript #reactjs
Вопрос:
Я передаю конкретный выбранный URL (данные) из компонента (List.js ) компоненту (DD.js ), DD.js имеет два компонента, левый и правый, я хочу отобразить данные в левом компоненте, поэтому передал реквизит левому компоненту, но я получаю сообщение об ошибке:
Объекты недопустимы как дочерний элемент React (найден: объект с ключами {url})
. Если вы хотели отобразить коллекцию дочерних элементов, используйте вместо этого массив.
DD.js
export default class DD extends Component {
render(){
let data = this.props.location.state
return(
<div className="dd-wrapper">
<div className="left-drawer-wrapper">
<Left url={data}/>
</div>
{/*right side section*/}
</div>
);
}
}
Left.js
export default class Left extends Component{
render(){
let url = this.props.url
return(
<div>
{url}
</div>
);
}
}
List.js
<tbody>
{
this.state.urls.map( (list,i) => {
return(
<tr key={i}>
<td>
<Link to={{pathname:`/service/${this.service_name}/requests`,
state:{url:this.state.urls[i]}}}
onClick={()=>this.selectedUrlHandler(i)}>{list}
</Link>
</td>
<td>{this.service_name}</td>
</tr>
);
})
}
</tbody>
Я получаю запрошенный ответ, когда я выполняю console.log (url) , но когда я удаляю его и делаю просто {url} , возникает ошибка, не уверен, что происходит не так.
Комментарии:
1. Скорее всего,
this.props.location.state
это объект, вот почему вы получаете эту ошибку2. Не могли бы вы показать List.js файл?
3. Вероятно, вы визуализируете объект таким образом:
{obj}
. Попробуйте разложить его вручную следующим образом{obj.value}
(это зависит от структуры объекта).
Ответ №1:
Поскольку URL передается как объект Left
компоненту, который пытался его отобразить, вы получаете сообщение об ошибке. Вместо этого просто отобразите конкретное свойство state
объекта, например
export default class DD extends Component {
render(){
let data = this.props.location.state
return(
<div className="dd-wrapper">
<div className="left-drawer-wrapper">
<Left url={data}/>
</div>
{/*right side section*/}
</div>
);
}
}
export default class Left extends Component{
render(){
let url = this.props.url.value
return(
<div>
{url}
</div>
);
}
}
Комментарии:
1. Попробовал ваш фрагмент, но ничего не отображается, он пустой, но когда я делаю консоль. журнал, я получаю undefined .
Ответ №2:
Вы не можете отобразить объект как дочерний элемент узла в компоненте react. Чтобы сделать это, вы можете упорядочить объект, т.е.
export default class Left extends Component{
render(){
let url = this.props.url
return(
<div>
{JSON.stringify(url)}
</div>
);
}
}
или
Вы можете отображать определенное значение из объекта за один раз.
export default class Left extends Component{
render(){
let url = this.props.url
return(
<div>
{url.url1}
{url.url2}
</div>
);
}
}
Ответ №3:
URL-это не строка, это объект, и react не может отображать объекты в JSX. Вы можете проверить это, преобразовав это в строку.
<Left url={JSON.stringify(data)} />
Комментарии:
1. Это неправда. React принимает и обрабатывает объекты в реквизитах.
2. да, я пробовал это, я получаю весь объект в виде строки, но мне нужна только часть значения объекта.
3. Покажите, какой ключ вы хотели показать в родительском компоненте, например {url.key}
4. Да, вы можете отправлять объекты в props, но я сказал, что это не может отображать объекты непосредственно в JSX. вам нужно вывести значение некоторого ключа. @Valdimir Serykh
5. @Uday — Да, когда я делаю {obj.key}, больше похожий на url.url (решение, которое мне было нужно), я получаю данные, также невозможно отобразить весь этот объект?