У меня есть компонент AutoFill, который выглядит так:
const AutoFill = (props) => {
console.info('proppppppsss', props)
const results = props.results || []
return (
<ul>
{results.map(({ name, href }) => (
<li key = {href}>
<a href = {href} target='_blank' rel='noopener noreferrer' key = {href}>
{name}
</a>
</li>
))}
</ul>
)
}
[
{
"a": {
"apple": {
"name": "apple",
"href": "https://www.apple.com/"
},
"armadillo": {
"name": "armadillo",
"href": "https://www.armadillo.com/"
}
},
"b": {
"box": {
"name": "box",
"href": "https://www.box.com/"
},
"berserk": {
"name": "berserk",
"href": "https://www.berserk.com/"
}
}
}
]
import fetch from 'isomorphic-fetch'
const FetchAndParseResults = (url) => {
return fetch(url).then(response => {
const parsedJson = response.json()
return parsedJson
})
}
export default FetchAndParseResults
import AutoFill from './autofill'
import PropTypes from 'prop-types'
export default class Searchbar extends React.Component {
constructor (props) {
super(props)
this.state = {
className: Styles.input,
icon: Styles.icon__wrapper,
value: []
}
this.input = React.createRef()
}
openInput = () => {
this.setState({
className: Styles.input__active,
icon: Styles.iconWidth
}, () => {
this.input.focus()
})
this.props.onOpen && this.props.onOpen()
}
closeInput = () => {
this.setState({
className: Styles.input,
icon: Styles.icon__wrapper
})
this.props.onClose && this.props.onClose()
}
handleChangeEvent = event => {
let value = event.target.value
this.setState({ value })
this.props.performSearch(value)
}
handleSubmit = event => {
event.preventDefault()
}
render () {
console.info('results', this.props.results)
console.info('state.value', this.state.value)
return (
<div>
<form onSubmit = {this.handleSubmit} className = {Styles.search}>
<div className = {this.state.icon}>
<Icon className = {Styles.icon__wrapper} iconName='faSearch' onClick = {this.openInput} />
</div>
<Search autoComplete='off' value = {this.state.value} onChange = {this.handleChangeEvent} id='search' tabIndex='0' myref = {input => { this.input = input }} className = {this.state.className} onBlur = {this.closeInput} placeholder='Search' />
</form>
<div>
<AutoFill results = {this.props.results} />
</div>
</div>
)
}
}
Search.propTypes = {
performSearch: PropTypes.func,
results: PropTypes.array
}
import React from 'react'
import Searchbar from './index.js'
import FetchAndParseResults from './FetchAndParseResults.js'
class SearchContainer extends React.Component {
state = {
results: []
}
performSearch = event => {
return FetchAndParseResults('static/autofill.json').then(data => {
this.setState({ results: data })
})
}
render () {
return (
<Searchbar
performSearch = {this.performSearch}
results = {this.state.results}
/>
)
}
}
export default SearchContainer
<a href = {href} target='_blank' rel='noopener noreferrer' key = {href}>{name}</a>
the data of the names should be displayed but instead of the names i get this,
https://gyazo.com/647176b09afcd55b4238f7975c0e7488Пустой неупорядоченный список.
Поэтому помощь будет очень признательна, и заглянул.
@Colin Я включил только те файлы, которые, как я думал, не отображали данные, но я их включил.
Если вы войдете в систему performSearch, что вы получите?
@Colin это то, что я получаю, gyazo.com/c12a041ff60ae0b31f60b9bbb5c040e2 Первый console.info - это событие performSearch, а второй - внутренняя часть performSearch
Есть ли причина, по которой вы загружаете свой JSON таким образом, а не просто import SearchResults from 'static/autofill.json'?
@AnonymousSB Поскольку такой импорт не работает, я сначала пробовал это, но каким-то образом он хочет получить его как URL-адрес. Так что мне пришлось сделать это так.

Ошибка заключается в том, что вы передаете данные в функцию
AutoFill. Не могли бы вы показать код для этого?