这是一个简单的示例,包括一个任务列表、任务详情和创建任务的页面。每个页面都会使用GraphQL查询或变更与后端进行通信
前端(React Material-UI Recoil):
首先,确保已安装了所需的依赖:
代码语言:bash复制npm install @material-ui/core @material-ui/icons recoil
然后,可以使用以下示例代码:
代码语言:javascript复制// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { RecoilRoot } from 'recoil';
import { ApolloProvider } from '@apollo/client';
import { ApolloClient, InMemoryCache } from '@apollo/client';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';
import TaskList from './TaskList';
import TaskDetail from './TaskDetail';
import TaskForm from './TaskForm';
import { CssBaseline, AppBar, Toolbar, Typography, Container } from '@material-ui/core';
const client = new ApolloClient({
uri: 'http://localhost:4000/graphql',
cache: new InMemoryCache(),
});
const App = () => (
<ApolloProvider client={client}>
<RecoilRoot>
<Router>
<CssBaseline />
<AppBar position="static">
<Toolbar>
<Typography variant="h6">Task Manager</Typography>
</Toolbar>
</AppBar>
<Container>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/tasks">Tasks</Link>
</li>
<li>
<Link to="/create">Create Task</Link>
</li>
</ul>
</nav>
<Switch>
<Route path="/tasks" component={TaskList} />
<Route path="/task/:id" component={TaskDetail} />
<Route path="/create" component={TaskForm} />
</Switch>
</Container>
</Router>
</RecoilRoot>
</ApolloProvider>
);
ReactDOM.render(<App />, document.getElementById('root'));
在上述示例中,使用了Material-UI
的组件来构建页面结构和样式。Recoil
用于状态管理,可以在TaskList
、TaskDetail
和TaskForm
组件中使用。
可以在各个组件中利用Recoil
来管理组件状态和全局状态,例如:
// src/TaskList.js
import React from 'react';
import { useRecoilValue } from 'recoil';
import { taskListState } from './recoil/atoms';
const TaskList = () => {
const tasks = useRecoilValue(taskListState);
return (
<div>
<h2>Task List</h2>
<ul>
{tasks.map((task) => (
<li key={task._id}>{task.title}</li>
))}
</ul>
</div>
);
};
export default TaskList;
在这个例子中,taskListState
是一个Recoil
原子状态,它存储了任务列表。可以在其他组件中以相似的方式使用Recoil
来管理状态。