小编Art*_*uya的帖子

如何在 NextJs 中为 Material UI 的媒体查询实现 SSR?

我无法遵循实现 Material UI 媒体查询的文档,因为它是为普通 React 应用程序指定的,而我正在使用 NextJs。具体来说,我不知道将文档指定的以下代码放在哪里:

import ReactDOMServer from 'react-dom/server';
import parser from 'ua-parser-js';
import mediaQuery from 'css-mediaquery';
import { ThemeProvider } from '@material-ui/core/styles';

function handleRender(req, res) {
  const deviceType = parser(req.headers['user-agent']).device.type || 'desktop';
  const ssrMatchMedia = query => ({
    matches: mediaQuery.match(query, {
      // The estimated CSS width of the browser.
      width: deviceType === 'mobile' ? '0px' : '1024px',
    }),
  });

  const html = ReactDOMServer.renderToString(
    <ThemeProvider
      theme={{
        props: {
          // Change the default options of useMediaQuery
          MuiUseMediaQuery: …
Run Code Online (Sandbox Code Playgroud)

reactjs material-ui server-side-rendering next.js

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

如何为 QListWidget 中的每个项目创建上下文菜单?

我正在开发一个 QGIS 插件,其中的 UI 是用 PyQt 制作的。我有一个 QListWidget 和一个填充它的函数。我想为每个项目添加一个上下文菜单,只有一个选项:打开另一个窗口。

我在搜索信息时遇到了麻烦,因为大部分信息仅适用于 PyQt4 而我使用的是版本 5。我想在其上添加上下文菜单的 QListWidget 是ds_list_widget. 这是一些相关的代码。

FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'dialog_base.ui'))

class Dialog(QDialog, FORM_CLASS):
    def __init__(self, parent=None):
        ...
        self.p_list_widget = self.findChild(QListWidget, 'projects_listWidget') 
        self.p_list_widget.itemClicked.connect(self.project_clicked)
        self.ds_list_widget = self.findChild(QListWidget, 'datasets_listWidget')        
        self.ds_list_widget.itemClicked.connect(self.dataset_clicked)
        ...


    def project_clicked(self, item):
        self.fill_datasets_list(str(item.data(Qt.UserRole)))        
        self.settings.setValue('projectIdValue', str(item.data(Qt.UserRole)))

    def fill_datasets_list(self, project_id):
        self.ds_list_widget.clear()
        dataset_list = self.anotherClass.fetch_dataset_list(project_id)

        for dataset in dataset_list:
            #Query stuff from remote
            ...
            item = QListWidgetItem(ds_name, self.ds_list_widget)
            item.setIcon(self.newIcon(ds_img))
            item.setData(Qt.UserRole, ds_id)
            self.ds_list_widget.addItem(item)
            self.ds_list_widget.setIconSize(self.iconSize)
Run Code Online (Sandbox Code Playgroud)

python contextmenu qlistwidget pyqt5

4
推荐指数
1
解决办法
4143
查看次数

如何用赋值(=)和相等(==)操作数制作语法?

作为我正在参加的“编译器理论”课程的一项作业,我必须用lex / yacc编码计算器。一些要求是:

  • 用户必须能够将数字或布尔值分配给变量
  • 计算器必须能够比较布尔语句

如果我尝试输入以下内容:

a=5;
a; // Output: 5
a==5; // Syntax error
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入以下内容,它将起作用:

5==a; // Output: 1
Run Code Online (Sandbox Code Playgroud)

我认为问题在于yacc正在读取a==5的是表格的新赋值,<a> <=> <=5>而不是<a> <==> <5>。我仍然不知道如何解决该问题。我尝试使用%prec注释,但这不能解决问题。

这是代码:calc.l

%{
#include "y.tab.h"
void yyerror(char* s);
%}

%%
"exit"      { return exit_command; }
[0-9]+      { yylval.num = atoi(yytext); return number; }
[a-zA-Z]    { yylval.id = yytext[0]; return identifier; }
[ \t\n]     ;
[-+*/()^%;] { return yytext[0]; }
[<>=!&|]    { return yytext[0]; }
.       { ECHO; yyerror("Unexpected character"); } …
Run Code Online (Sandbox Code Playgroud)

c yacc lex

2
推荐指数
1
解决办法
65
查看次数