将 useEffect 与 class 个组件一起使用
Using useEffect with class Components
我有一个 class 用于呈现数据库中的用户列表
export default class Users extends React.Component {
constructor() {
super()
this.state = {
data : [] //define a state
}
}
renderUsers = () => {
useEffect(() => {
fetch('exemple.com')
.then((response) => response.json())
.then((json) => this.setState({data: json.result})) // set returned values into the data state
.catch((error) => console.error(error))
}, []);
return this.state.data.map((value,key)=>{ // map state and return some views
......
})
}
render() {
return (
<View style={{ flex: 1 }}>
{this.renderUsers()} //render results
</View>
);
}
}
问题是这段代码会抛出以下错误:
Invalid Hook call, Hooks can be called only inside of the body
component
我认为不可能在 class 组件中使用钩子..
如果不可能,从这个 class 中的服务器获取数据的最佳方法是什么?
您不能在 class 组件中使用挂钩。请改用 componentDidMount
。
Hooks 只能在功能组件中使用。
您可以将您的组件重写为功能性组件,如下所示:
export default Users = () => {
const [data, setData] = useState([]);
useEffect(() => {
fetch('exemple.com')
.then((response) => response.json())
.then((json) => setData(json.result)) // set returned values into the data state
.catch((error) => console.error(error))
}, []);
const renderUsers = () => {
return data.map((value, key) => {
// DO STUFF HERE
})
}
return (
<View style={{ flex: 1 }}>
{renderUsers()} //render results
</View>
)
}
我有一个 class 用于呈现数据库中的用户列表
export default class Users extends React.Component {
constructor() {
super()
this.state = {
data : [] //define a state
}
}
renderUsers = () => {
useEffect(() => {
fetch('exemple.com')
.then((response) => response.json())
.then((json) => this.setState({data: json.result})) // set returned values into the data state
.catch((error) => console.error(error))
}, []);
return this.state.data.map((value,key)=>{ // map state and return some views
......
})
}
render() {
return (
<View style={{ flex: 1 }}>
{this.renderUsers()} //render results
</View>
);
}
}
问题是这段代码会抛出以下错误:
Invalid Hook call, Hooks can be called only inside of the body component
我认为不可能在 class 组件中使用钩子.. 如果不可能,从这个 class 中的服务器获取数据的最佳方法是什么?
您不能在 class 组件中使用挂钩。请改用 componentDidMount
。
Hooks 只能在功能组件中使用。
您可以将您的组件重写为功能性组件,如下所示:
export default Users = () => {
const [data, setData] = useState([]);
useEffect(() => {
fetch('exemple.com')
.then((response) => response.json())
.then((json) => setData(json.result)) // set returned values into the data state
.catch((error) => console.error(error))
}, []);
const renderUsers = () => {
return data.map((value, key) => {
// DO STUFF HERE
})
}
return (
<View style={{ flex: 1 }}>
{renderUsers()} //render results
</View>
)
}