我正在尝试在 中创建一个动态按钮react-admin
。
对于每个按钮,它都会点击一个唯一的地址,我该怎么做?
不幸的是,我有这个错误:props.username is undefined
。
export const LoginCredentialList = (props) => (
<List {...props} pagination={<PostPagination/>}>
<Datagrid>
<TextField label="Username" source="username" />
<Button label="Re-invoke Login"
onClick={() => {
axios.get("http://localhost:8080/admin/" + somehow_read_username_here)
.then((res)=>console.log(res));
}}
/>
</Datagrid>
</List>
);
Run Code Online (Sandbox Code Playgroud)
这是parent
调用或使用上述组件的地方:
class SPanel extends React.Component {
render() {
return (
<div>
<Admin dataProvider={restDataProvider}>
<Resource name="loginCredential" list={LoginCredentialList} />
...
Run Code Online (Sandbox Code Playgroud) 只是对 React 的生命周期有点困惑。这是我的理解...
该
render()
总是先运行,对不对?如果是这样......
这意味着setState()
内部useEffect()
只在初始之后运行,对render()
吗?
问题:
当上面发生时,整个组件是否重新渲染?
所以这将是组件第二次渲染只是为了加载state
.
那不会是性能问题吗?
我有一个src/reducers/index.tsx
文件,我在其中输出所有减速器:
import counterReducer from '../reducers/counter';
import loggedReducer from '../reducers/isLogged';
import {combineReducers} from 'redux';
const allReducers = combineReducers({
counter: counterReducer,
isLogged: loggedReducer,
});
export default allReducers;
Run Code Online (Sandbox Code Playgroud)
然后在我的src/index.tsx
:
import {Provider} from 'react-redux';
const store = createStore(allReducers);
ReactDOM.render(
<React.Fragment>
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root'),
);
Run Code Online (Sandbox Code Playgroud)
最后在我的src/app.tsx
我有:
import {useSelector} from 'react-redux';
const App = () => {
const counter = useSelector(state => state.counter);
return (
<h1>counter {counter}</h1>
);
};
Run Code Online (Sandbox Code Playgroud)
错误是报告在的state.counter
部分useSelector
:
> Property 'counter' …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Jest 为我的reactjs
项目进行单元测试。
当我想测试组件的渲染时,出现以下错误:
SyntaxError: /Users/jk/EpitechProjects/T-WEB-700/CountOfMoney_18/front/src/tests/components/Navbar.test.js:
Support for the experimental syntax 'jsx' isn't currently enabled (9:29):
7 |
8 | test('Navbar : should render navbar', ()=>{
> 9 | const wrapper = shallow(<Navbar />);
| ^
10 | expect(wrapper.find('nav').length).toBe(1);
Add @babel/preset-react (https://git.io/JfeDR) to the 'presets' section of
your Babel config to enable transformation. If you want to leave it as-is,
add @babel/plugin-syntax-jsx (https://git.io/vb4yA) to the 'plugins' section to
enable parsing.
Run Code Online (Sandbox Code Playgroud)
但是,它似乎无法识别JSX
语法。
我已经尝试了两者@babel/preset-react
和@babel/plugin-syntax-jsx
建议,但仍然存在相同的错误。 …
在 my 中App
,我们有基于角色的permissions
喜欢ADD/DELETE
。
Admin
拥有add
, delete
,edit
的所有权限records
customers
没有delete
权限。因此,我想隐藏delete
复选框内的<Datagrid>
客户。
//RoleList.js
import React from "react";
import { List, Datagrid, TextField, SingleFieldList, ChipField, EditButton, DeleteButton, ReferenceArrayField, Loading } from "react-admin";
import { makeStyles } from "@material-ui/core/styles";
const useStyles = makeStyles(theme => ({
chips: {
backgroundColor: theme.palette.secondary.light
}
}));
const RoleList = ({ permissions, ...props }) => {
const classes = useStyles();
if (!permissions) …
Run Code Online (Sandbox Code Playgroud) reactjs ×4
react-admin ×2
babel-jest ×1
babeljs ×1
javascript ×1
jestjs ×1
material-ui ×1
redux ×1
typescript ×1