我使用API“ https://www.definitions.net/definitions_api.php”制作了react.js应用。 当我记录data.result时,它输出正确的结果数组,但是当我通过状态映射时,出现以下错误:“对象作为React子对象无效(找到:带有键{}的对象)。如果您的意思是要呈现子级集合,请改用数组。”
//states
const [definition, setDefinition] = useState([])
const [search, setSearch] = useState('')
const [query, setQuery] = useState('')
useEffect(() => {
getDef()
}, [query])
//FETCH
const getDef = async () => {
const response = await fetch(`....`)
const data = await response.json()
setDefinition(data.result);
//handle input
const updateSearch = e => {
setSearch(e.target.value)
}
//get the final query onSubmit
const getQuery = e =>{
e.preventDefault()
setQuery(search)
setSearch('')
}
return (
{ definition && definition.map(item => (
<Definition term={item.term}
partofspeech = {item.partofspeech}
definition={item.definition}
example = {item.example}
/>
)
)
}
);
在“定义”组件中,我分解了道具:
function Definition({term, partofspeech, definition, example}) {
return (
<div className="definition">
<h4>{term} ({partofspeech})</h4>
<p>{definition}</p>
<p>{example}</p>
</div>
)
}
欢迎您的帮助,谢谢。
答案 0 :(得分:1)
尝试一下,当您循环组件循环而没有根元素的定义时,它将导致错误
const Component = () => {
....
return (
<Fragment>
{ definition && definition.map(item => (
<Definition term={item.term}
partofspeech = {item.partofspeech}
definition={item.definition}
example = {item.example}
/>
)
)
}
)
</Fragment>
)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
答案 1 :(得分:0)
作为回报,您既有({})
又有圆形和卷曲,可以将两者都删除,应该直接返回
return definition && definition.map(item => (
<Definition term={item.term}
partofspeech = {item.partofspeech}
definition={item.definition}
example = {item.example}
/>
));
简短代码段,您可以运行它并查看:
const { useState } = React;
const App = () => {
const [users,setUsers] = useState(['Vivek' , 'Darshita', 'Darshvi' , 'Coming..']);
return users.map(user => <p>{user}</p>);
}
ReactDOM.render(<App />, document.getElementById('react-root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react-root"></div>