小编Yan*_*ick的帖子

React Router 的 useParams 导致 useEffect 重新运行

我正在使用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)

reactjs react-router react-hooks

7
推荐指数
1
解决办法
3679
查看次数

使用material-ui表和react-beautiful-dnd

我希望结合使用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与这些属性一起使用?

material-ui

3
推荐指数
2
解决办法
1520
查看次数

使用 REST 框架从 Django 中的 POST 获取 JSON 数据

我正在尝试在 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 的内容: …

python django rest django-rest-framework gspread

0
推荐指数
1
解决办法
1万
查看次数