我正在使用react-router5.1 和react16.10。
对于主从页面,我使用useParams()从 url 获取 id 以打开当前组的页面。打开发生在useEffect(). 因此,id必须作为该效果的依赖项给出。但是,在创建新组时,当有足够的数据使组有效时,API 会发送该id组的 并将 URL 设置为/group/:id。然而,结果是,效果再次运行。
function Groups(props) {
const { id } = useParams();
const history = useHistory();
const [group, setGroup] = useState(NEW_GROUP);
const getData = useCallback(async () => {
await Promise.resolve(Api.getGroups());
}, []);
const getGroup = useCallback(async group => {
history.push(`/groups/${group.id}`);
await Promise.resolve(Api.getGroup(group)).then(data => {
setGroup(data.group);
});
}, [getData, history]);
useEffect(() => {
getData();
if (id !== undefined) …Run Code Online (Sandbox Code Playgroud) 我希望结合使用material-ui和react-beautiful-dnd来创建可排序的表。但是,使用material-ui的表组件会造成麻烦,因为TableBody将不接受innerRef,而TableRow将不接受innerRef和isDragging。请参阅下面的代码:
<DragDropContext onDragEnd={this.onDragEnd}>
<Fragment>
<Table className={classes.table}>
<TableHead>
<TableRow>
<TableCell />
<TableCell>Name</TableCell>
<TableCell numeric>Number</TableCell>
<TableCell>Time</TableCell>
</TableRow>
</TableHead>
<Droppable droppableId="table">
{(droppableProvided) => (
<TableBody
innerRef={(ref) => {
this.tableRef = ref;
droppableProvided.innerRef(ref);
}}
{...droppableProvided.droppableProps}
>
{this.state.users.map((user, index) => (
<Draggable
draggableId={user.id}
index={index}
key={user.id}
>
{(
provided,
snapshot,
) => (
<TableRow
innerRef={provided.innerRef}
isDragging={snapshot.isDragging}
{...provided.draggableProps}
{...provided.dragHandleProps}
>
<TableCell><DragIndicatorIcon /></TableCell>
<TableCell>{user.name}</TableCell>
<TableCell numeric>{user.number}</TableCell>
<TableCell>10</TableCell>
</TableRow>
)}
</Draggable>
))}
</TableBody>
)}
</Droppable>
</Table>
</Fragment>
</DragDropContext>
Run Code Online (Sandbox Code Playgroud)
我怎样才能使material-ui与这些属性一起使用?
我正在尝试在 Django 中为带有 Gspread 的 Google 电子表格构建一个 REST API,我遇到了很多问题(所以如果有人碰巧有一个完整的例子,请随时分享......拜托?:) )。其中一个问题是我试图为 POST 请求接收 JSON(当然还有其他请求)。然而,这是失败的。这是我的代码:
view.py(我知道 IF 语句不是它的工作原理
elif request.method == 'POST':
received_json_data = json.loads(request.body.decode("utf-8"))
content = received_json_data['content']
if content != "":
worksheet.insert_row([content["date"], content["days"], content["firstname"], content["lastname"], content["team"], content["training"], content["company"], content["city"], content["cost"], content["invoice"], content["info"]], 1)
return JsonResponse(content, safe=False, status=status.HTTP_201_CREATED)
else:
return JsonResponse([], safe=False, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
为此编写的测试:
def test_post_all_training_returns_201_when_correct_format(self):
"""
A POST request on /trainings/ should create a new training
"""
headers = {'content-type': 'application/json'}
response = self.client.post('/trainings/', json=json.dumps(self.training_json_body), headers=headers, format="json")
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud)
training_json_body 的内容: …
django ×1
gspread ×1
material-ui ×1
python ×1
react-hooks ×1
react-router ×1
reactjs ×1
rest ×1